Z站长网 Z站长网 电脑基础 查看内容

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

2025-7-10 20:34| 发布者: 那是伟大的爱啊| 查看: 141| 评论: 0

摘要: 一、进制底子:盘算机天下的四种语言1.十进制(Decimal):人类的一样平常语言界说:以10为基数,数字范围0-9,每一位权值为10的幂次。示例:123=1×10²+2×10¹+3×10⁰。应用场景:一样平常生存中的计数、数学运 ...

一、进制底子:盘算机天下的四种语言

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. 处置惩罚浮点数

# 十进制小数转二进制(保存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 → 11000000.10101000.00000001.00000001)。
  3. 嵌入式开辟:设置寄存器值时常用十六进制(如0x1F表现31)。
  4. 数据加密:哈希值通常以十六进制表现(如SHA-256输出为64位十六进制字符串)。

六、总结与训练

  • 焦点公式: 进制转十进制:按权睁开求和。 十进制转其他进制:除基取余逆序分列。 二进制与八进制/十六进制:分组快速转换。
  • Python工具: int():恣意进制转十进制。 bin()/oct()/hex():十进制转对应进制。 自界说函数:实现恣意进制互转。

训练标题

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

通过本文的学习,你不但把握了进制转换的理论知识,还学会了用Python高效处置惩罚各种进制转换使命。无论是盘算机科学的初学者,照旧编程爱好者,这些技能都将为你打开数字天下的新视角。


路过

雷人

握手

鲜花

鸡蛋
返回顶部