由Python想起的各种进制数

本文详细介绍了计算机中常见的几种进制(10进制、2进制、8进制、16进制)及其相互转换方法,包括二进制与十进制、任意进制与十进制、二进制与八进制、二进制与十六进制的转换原理及步骤。
    前几天在学习Python里的一个函数string的方法atoi(),偶然想起了进制的相关知识。所以觉得应该复习一下。

    在计算机中进制有10进制,2进制,8进制,和16进制。那么他们之间是如何定义和转换的呢?最为我们熟悉的进制应该是10进制,也就是逢10进1的制度,从0-9一共10个数,逢10就进位了。2进制呢?2进制的数只有0和1两个,也就逢2进1的制度,8进制亦是如此。但16进制有着稍微特殊的表示,它不像其他进制完全是数字构成,它加入了字母。所以16进制的所有数是这样的 数字部分是0-9,超过9以后就是A(10)、B(11)、C(12)、D(13)、E(14)、F(15),超过F,也就是逢16,这时候我们就要向前进一位了。
    在计算机中,将2进制数所包含的位数成为比特(bit)数,1比特表示一为2进制数。

    在解释这些进制之间的转换的时候,有必要提一个词语 “权”的概念。那么什么是权呢?权是用来表示某一数位上所代表的实际数值。举例说明一下:十进制数:425.8  这里的4的位置是百位,那么它也可以这么表示4*100,2的位置是10位,那么它可以这么表示2*10,5是个位,可以表示为5*1,8是小数位表示成8*-1。数在不同的位置上表示不同的实际数值,它们就必须乘上一个因子,即 100、10 ……那么这里的100,10,1,-1就叫做权,10进制的权就是10。所以10进制的425.8就可以这样表示:



接下来说下进制的转换,首先说下2进制和10进制之间的转换。
2进制转换成10进制的方法就是“按权相加”,即把给定的2进制数,按权展开,然后相加得到相应10进制的数。举例说明一下:








10进制转2进制,如果带小数,那么整数和小数部分要分别转换,然后在合起来。对于整数部分的转换方法是这样:“除2取余,逆序排列”,即用10进制数除以2,得到一个商和一个余数,在将得到的商继续除以2,……一直除下去,直到商为0为止。小数部分是“乘2取整,顺序排列”,即用小数部分乘以2,将的出的数的整数部分取处,余下小数继续乘以2,直到小数部分为0,或达到要求的精度为止。下面举例说明一下:
  


-
  



在说一下任意进制数和十进制数的转换:这种转换同二进制转换为十进制数类似,即:‘按权相加’如下面的图示:









十进制转任意进制数的方法,类似与十进制数转二进制数,整数部分和小数部分要分别转换,整数部分是:“除以基数,取其余数,倒序排列”。小数部分是“乘以基数,取其整数,顺序排列”。
如下图示:






二进制与八进制的转换:二进制的基数为2,八进制的基数为8,二者之间有如下的关系:2的三次方等于8,这就决定了一位八进制数与三位二进制数是完全对应的,对应关系如下:




所以二进制转八进制的方法是“三位合一位,按权相加”,即以小数点为界,整数部分从右到左,每三位为一组分组,最高有效位数不足三位补0,小数部分从左到右,每三位一组分组,最低有效数位不足补0,将每一组三位二进制数按权展开后相加就得到对应的八进制数,八进制转换成二进制的方法是“一位拆三位,依权定码”。如下所示:





二进制和十六进制的转换:二进制的基数2和十六进制的基数16存在着2的4次方等于16的关系,所以二进制与十六进制之间也是完全对应的,对应关系如下:





二进制数转换为十六进制的方法是:“四位合一位,按权相加”。十六进制转换成二进制数是“一位拆四位,依权定码”。如下所示:





全文完
<think>嗯,用户问的是在Python中如何将二进制字符串转换为整。首先我得回忆一下Python中的相关函。通常,处理字符串到整的转换,可能会想到int()函。但二进制字符串的话,可能需要指定基。 对,int函确实有第二个参base,可以设置为2,这样就能把二进制字符串转成十进制整。比如int('1010', 2)应该返回10。不过要确保字符串是有效的二进制,也就是只包含0和1,否则会报错。 然后,可能用户还会遇到带有前缀的情况,比如'0b1010'这样的字符串。这时候直接使用int的话,需要去掉前缀或者调整base参。不过其实Python的int函会自动处理前缀,如果字符串以'0b'开头,即使base设为0,也会正确解析。例如int('0b1010', 0)也是可以的。 另外,用户可能想知道其他方法,比如使用位运算或者手动计算,但通常推荐使用内置函,因为效率高且简洁。不过可能需要处理异常情况,比如无效字符,这时候应该用try-except来捕获ValueError。 总结的话,步骤应该是:检查字符串是否符合格式,使用int转换,处理可能的异常。可能还要提到二进制字符串的格式,比如是否允许空格、前缀等。需要给出几个例子,让用户更清楚。比如不带前缀的情况,带前缀的情况,以及错误处理的方式。</think>在Python中将二进制字符串转换为整可以通过以下步骤实现: 1. **确认字符串格式**:二进制字符串必须以`0b`开头或不带前缀,且仅包含`0`和`1`字符。 有效示例:`"1010"` 或 `"0b1010"` 2. **使用`int()`函转换**: ```python # 方式1:带前缀的字符串(base=0自动识别进制) num = int("0b1010", base=0) # → 10 # 方式2:不带前缀的字符串(需显式指定base=2) num = int("1010", base=2) # → 10 ``` 3. **异常处理**(非二进制字符时): ```python try: num = int("1020", 2) # 包含非法字符'2' except ValueError as e: print(f"错误:{e}") # → 错误:invalid literal for int() with base 2: '1020' ``` 4. **手动转换算法**(了解原理): ```python binary_str = "1010" result = 0 for i, bit in enumerate(reversed(binary_str)): result += int(bit) * (2 ** i) print(result) # → 10 ``` **关键点总结**: - ✅ 标准方法用`int(字符串, base=2)` - ✅ 带`0b`前缀时可用`base=0`自动解析 - ⚠️ 非法字符(如`2`、`a`)会触发`ValueError` - 🔧 字符串可包含下划线增强可读性(Python 3.6+):`int('1_0_1_0', 2) → 10`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值