首页 > 自考资讯 > 培训提升

一文搞懂二、八、十、十六进制:从手动计算到Python实战

2026 05 12 14:21:08

一、进制基础:计算机世界的四种语言

1. 十进制(Decimal):人类的日常语言

定义:以10为基数,数字范围0-9,每一位权值为10的幂次。示例:123 = 1×10² + 2×10¹ + 3×10⁰。应用场景:日常生活中的计数、数学运算。

2. 二进制(Binary):计算机的底层语言

定义:以2为基数,数字范围0-1,每一位权值为2的幂次。示例:101 = 1×2² + 0×2¹ + 1×2⁰ = 5。应用场景:CPU指令、内存存储、逻辑电路设计。

3. 八进制(Octal):简化版二进制

定义:以8为基数,数字范围0-7,每一位权值为8的幂次。示例:377 = 3×8² + 7×8¹ + 7×8⁰ = 255。应用场景:早期Unix系统文件权限(如chmod 777)。

4. 十六进制(Hexadecimal):高效的二进制缩写

定义:以16为基数,数字范围0-9和A-F(A=10,F=15),每一位权值为16的幂次。示例:FF = 15×16¹ + 15×16⁰ = 255。应用场景:颜色代码(如#FF0000表示红色)、内存地址。

二、手动计算与互转换:掌握核心算法

1. 进制转十进制:按权展开法

公式:N = dₙ×bⁿ + dₙ₋₁×bⁿ⁻¹ + ... + d₀×b⁰(b为基数,d为每一位数字)。示例: 二进制1011 → 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 11。 十六进制A3F → 10×16² + 3×16¹ + 15×16⁰ = 2623。

2. 十进制转其他进制:除基取余法

步骤:将十进制数不断除以目标基数,记录余数,直到商为0,最后将余数逆序排列。示例: 十进制25转二进制:

25 ÷ 2 = 12 余1 12 ÷ 2 = 6 余0 6 ÷ 2 = 3 余0 3 ÷ 2 = 1 余1 1 ÷ 2 = 0 余1 → 余数逆序为11001 ``` - 十进制255转十六进制: ``` 255 ÷ 16 = 15 余15(F) 15 ÷ 16 = 0 余15 → 余数逆序为FF

3. 二进制与八进制/十六进制的快速转换

二进制→八进制:从右往左每3位分组,不足补0,每组转十进制。

示例:110101 → 110 101 → 6 5→ 八进制65二进制→十六进制:从右往左每4位分组,不足补0,每组转十进制。

示例:11010110 → 1101 0110 → D 6 → 十六进制D6

三、Python实战:用代码解放双手

1. 内置函数快速转换

功能

函数及示例

输出格式

二进制转十进制

int('1011', 2) → 11

整数

十进制转二进制

bin(11) → '0b1011'

带前缀字符串

八进制转十进制

int('15', 8) → 13

整数

十进制转八进制

oct(13) → '0o15'

带前缀字符串

十六进制转十进制

int('A3F', 16) → 2623

整数

十进制转十六进制

hex(2623) → '0xa3f'

带前缀小写字符串

2. 去除前缀与格式化输出

# 二进制转十进制(去除前缀)binary = '0b1011'decimal = int(binary, 2) # 直接转换无需切片print(decimal) # 11# 十进制转二进制(不带前缀)decimal = 11binary = bin(decimal)[2:] # 切片去除'0b'print(binary) # '1011'# 格式化输出固定位数print(format(11, '08b')) # '00001011'(补前导零)

3. 任意进制互转:自定义函数

def base_converter(number_str, from_base, to_base): # 第一步:转十进制 decimal = int(number_str, from_base) # 第二步:转目标进制 if to_base == 2: return bin(decimal)[2:] elif to_base == 8: return oct(decimal)[2:] elif to_base == 16: return hex(decimal)[2:].upper() # 转为大写 else: return str(decimal)# 示例:二进制'1011'转十六进制print(base_converter('1011', 2, 16)) # 'B'

4. 处理浮点数

# 十进制小数转二进制(保留10位精度)def decimal_to_binary(n): integer_part = int(n) fraction_part = n - integer_part # 整数部分转换 binary_int = bin(integer_part)[2:] # 小数部分转换 binary_frac = '' while fraction_part > 0 and len(binary_frac) < 10: fraction_part *= 2 bit = int(fraction_part) binary_frac += str(bit) fraction_part -= bit return f"{binary_int}.{binary_frac}"print(decimal_to_binary(10.625)) # '1010.101'

四、常见错误与注意事项

输入非法字符:确保输入字符串仅包含目标进制的有效字符(如二进制只能有0和1)。大小写问题:十六进制字母不区分大小写,但输出通常用大写(如0XFF)。精度丢失:浮点数转换可能存在精度问题,建议使用decimal模块处理高精度需求。前缀处理:bin()、oct()、hex()返回的字符串带有前缀,需要切片去除(如[2:])。

五、实际应用场景

颜色代码:十六进制#RRGGBB表示红、绿、蓝三原色(如#FF0000为红色)。网络编程:IP地址转换为二进制(如192.168.1.1 → 11000000.10101000.00000001.00000001)。嵌入式开发:设置寄存器值时常用十六进制(如0x1F表示31)。数据加密:哈希值通常以十六进制表示(如SHA-256输出为64位十六进制字符串)。

六、总结与练*

核心公式: 进制转十进制:按权展开求和。 十进制转其他进制:除基取余逆序排列。 二进制与八进制/十六进制:分组快速转换。Python工具: int():任意进制转十进制。 bin()/oct()/hex():十进制转对应进制。 自定义函数:实现任意进制互转。

练*题目:

将二进制110101转换为八进制和十六进制。将十进制302转换为二进制和十六进制。用Python实现将十六进制0xFF转换为二进制,并输出不带前缀的结果。

通过本文的学*,你不仅掌握了进制转换的理论知识,还学会了用Python高效处理各种进制转换任务。无论是计算机科学的初学者,还是编程爱好者,这些技能都将为你打开数字世界的新视角。

版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除

猜你喜欢