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

一、进制基础:计算机世界的四种语言
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'
四、常见错误与注意事项
- 输入非法字符:确保输入字符串仅包含目标进制的有效字符(如二进制只能有0和1)。
- 大小写问题:十六进制字母不区分大小写,但输出通常用大写(如0XFF)。
- 精度丢失:浮点数转换可能存在精度问题,建议使用decimal模块处理高精度需求。
- 前缀处理:bin()、oct()、hex()返回的字符串带有前缀,需要切片去除(如[2:])。
五、实际应用场景
- 颜色代码:十六进制#RRGGBB表示红、绿、蓝三原色(如#FF0000为红色)。
- 网络编程:IP地址转换为二进制(如192.168.1.1 → ..00000001.00000001)。
- 嵌入式开发:设置寄存器值时常用十六进制(如0x1F表示31)。
- 数据加密:哈希值通常以十六进制表示(如SHA-256输出为64位十六进制字符串)。
六、总结与练习
- 核心公式: 进制转十进制:按权展开求和。 十进制转其他进制:除基取余逆序排列。 二进制与八进制/十六进制:分组快速转换。
- Python工具: int():任意进制转十进制。 bin()/oct()/hex():十进制转对应进制。 自定义函数:实现任意进制互转。
练习题目:
- 将二进制转换为八进制和十六进制。
- 将十进制302转换为二进制和十六进制。
- 用Python实现将十六进制0xFF转换为二进制,并输出不带前缀的结果。
通过本文的学习,你不仅掌握了进制转换的理论知识,还学会了用Python高效处理各种进制转换任务。无论是计算机科学的初学者,还是编程爱好者,这些技能都将为你打开数字世界的新视角。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/179182.html