进制转换

一、进制基础概念

  1. 进制的定义

    • 进位计数制,人为定义的带进位计数方法。
    • 对于X进制,逢X进一(如10进制逢10进1,2进制逢2进1)。
  2. 常见进制

    进制 应用场景 数字表示
    10进制 日常生活 0-9
    2进制 计算机底层 0,1
    8进制 简化二进制表示 0-7
    16进制 编程、内存地址 0-9, A(10)-F(15)
    60进制 时间、角度 0-59
  3. 数数规则对比

    • 10进制: 0, 1, 2, ···, 9, 10, 11, ···
    • 2进制: 0, 1, 10, 11, 100, ···
    • 8进制: 0, 1, 2, ···, 7, 10, 11, ···
    • 16进制: 0, 1, 2, ···, 9, A, B, ···, F, 10, 11, ···

二、进制转换方法

1. 十进制 → X进制:除X取余法
  • 步骤
    1. 用十进制数除以X,记录余数。
    2. 将商继续除以X,直到商为0。
    3. 余数倒序排列即为结果。

示例1:10 → 2进制

10 ÷ 2 = 5 余 0  
 5 ÷ 2 = 2 余 1  
 2 ÷ 2 = 1 余 0  
 1 ÷ 2 = 0 余 1  
→ 倒序:1010

示例2:431 → 16进制

431 ÷ 16 = 26 余 F(15)  
 26 ÷ 16 = 1 余 A(10)  
  1 ÷ 16 = 0 余 1  
→ 倒序:1AF
2. X进制 → 十进制:按权展开法
  • 步骤:从右到左(低位到高位),每位数字乘以X的幂次后求和。

示例1:2进制 1100 → 10进制

0×2⁰ + 0×2¹ + 1×2² + 1×2³ = 0 + 0 + 4 + 8 = 12

示例2:16进制 1A → 10进制

A(10)×16⁰ + 1×16¹ = 10 + 16 = 26
3. 二进制 ↔ 八/十六进制:分组替换法
  • 核心规则
    • 1位八进制 = 3位二进制(口诀:421
    • 1位十六进制 = 4位二进制(口诀:8421

示例1:2进制 1011010 → 8进制

分组:001 011 010 (补前导0)  
计算:  
  001 → 0×4 + 0×2 + 1×1 = 1  
  011 → 0×4 + 1×2 + 1×1 = 3  
  010 → 0×4 + 1×2 + 0×1 = 2  
→ 结果:132₈

示例2:2进制 1011010 → 16进制

分组:0101 1010  
计算:  
  0101 → 0×8 + 1×4 + 0×2 + 1×1 = 5  
  1010 → 1×8 + 0×4 + 1×2 + 0×1 = 10(A)  
→ 结果:5A₁₆

反向转换:直接按位数展开。

  • 例:8进制 153 → 2进制
    1 → 001  
    5 → 101  
    3 → 011  
    → 结果:001101011(可省略前导0→1101011)
    

三、使用示例

int main() {
    // 十进制转其他进制
    cout << "10 to binary: " << BaseConverter::fromDecimal(10, 2) << endl;
    cout << "431 to hex: " << BaseConverter::fromDecimal(431, 16) << endl;
    
    // 其他进制转十进制
    cout << "1010 to decimal: " << BaseConverter::toDecimal("1010", 2) << endl;
    cout << "1AF to decimal: " << BaseConverter::toDecimal("1AF", 16) << endl;
    
    // 直接转换
    cout << "Binary 1100 to hex: " 
         << BaseConverter::convert("1100", 2, 16) << endl;
    
    return 0;
}

四、速记技巧

  1. 二进制分组
    • 八进制:从右到左每3位一组,不足补前导0。
    • 十六进制:每4位一组。
  2. 权值口诀
    • 八进制:4-2-1
    • 十六进制:8-4-2-1
  3. 字母转换
    • A(10)-F(15) 用于十六进制,避免混淆。

五、易错点提醒

  1. 余数倒序:十进制转X进制时,余数需反向书写
  2. 补零对齐:二进制分组时,确保位数是3或4的倍数。
  3. 字母大小写:十六进制中A-F通常大写,但编程中大小写均可。
posted @ 2025-04-01 15:42  Jason227  阅读(87)  评论(0)    收藏  举报