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

一文搞懂二、八、十、十六进制:从手动计算到Python实战示例 101 1 2 0 2 1 2 5 定义 以 8 为基数 数字范围 0 7 每一位权值为 8 的幂次

大家好,欢迎来到IT知识分享网。

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

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

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,每组转十进制。
 示例: → 110 101 → 6 5→ 八进制65 
  • 二进制→十六进制:从右往左每4位分组,不足补0,每组转十进制。
 示例: → 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 = 11 binary = 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' 

四、常见错误与注意事项

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

五、实际应用场景

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

六、总结与练习

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

练习题目

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

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/179182.html

(0)
上一篇 2025-05-24 09:15
下一篇 2025-05-24 09:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信