一、进制底子:盘算机天下的四种语言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 = 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. 处置惩罚浮点数
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高效处置惩罚各种进制转换使命。无论是盘算机科学的初学者,照旧编程爱好者,这些技能都将为你打开数字天下的新视角。 |