进制转换
一、进制基础概念
-
进制的定义
- 进位计数制,人为定义的带进位计数方法。
- 对于X进制,逢X进一(如10进制逢10进1,2进制逢2进1)。
-
常见进制
进制 应用场景 数字表示 10进制 日常生活 0-9 2进制 计算机底层 0,1 8进制 简化二进制表示 0-7 16进制 编程、内存地址 0-9, A(10)-F(15) 60进制 时间、角度 0-59 -
数数规则对比
- 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取余法
- 步骤:
- 用十进制数除以X,记录余数。
- 将商继续除以X,直到商为0。
- 余数倒序排列即为结果。
示例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位八进制 = 3位二进制(口诀:
示例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;
}
四、速记技巧
- 二进制分组:
- 八进制:从右到左每3位一组,不足补前导0。
- 十六进制:每4位一组。
- 权值口诀:
- 八进制:
4-2-1
- 十六进制:
8-4-2-1
- 八进制:
- 字母转换:
- A(10)-F(15) 用于十六进制,避免混淆。
五、易错点提醒
- 余数倒序:十进制转X进制时,余数需反向书写。
- 补零对齐:二进制分组时,确保位数是3或4的倍数。
- 字母大小写:十六进制中
A-F
通常大写,但编程中大小写均可。