一、常见的进制
| 进制 | 基数 | 数字符号 | 前缀/后缀 |
|---|---|---|---|
| 二进制 | 2 | 0, 1 | 0b(如 0b1010) |
| 八进制 | 8 | 0~7 | 0o 或 0(如 0o17) |
| 十进制 | 10 | 0~9 | 无 |
| 十六进制 | 16 | 0~9, A~F | 0x(如 0x1F) |
二、各进制转十进制
方法:按权展开求和
对于任意 R 进制数,第 i 位的权是 R的 i 次方(整数部分从右往左,i 从 0 开始)
例 1:二进制 1011 → 十进制
1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8+0+2+1 = 11(二进制对应底数是 2)
例 2:十六进制 2F → 十进制
2×16¹ + 15×16⁰ = 32+15 = 47(十六进制对应底数是 16)
例 3:带小数 101.11(二进制)→ 十进制
1×2² + 0×2¹ + 1×2⁰ + 1×2⁻¹ + 1×2⁻² = 4+0+1+0.5+0.25 = 5.75
例 4:八进制 257 → 十进制
2×8² + 5×8¹ + 7×8⁰ = 128 + 40 + 7 = 175(八进制对应底数是 8)
例 5:带小数的八进制 257.25 → 十进制
整数部分:2×8² + 5×8¹ + 7×8⁰ = 128+40+7 = 175
小数部分:2×8⁻¹ + 5×8⁻² = 2×0.125 + 5×0.015625 = 0.25 + 0.078125 = 0.328125
合并结果:257.25₍₈₎ = 175.328125₍₁₀₎
例 6:十进制 257 → 十进制 (说明"十进制本身就是按权展开的结果")
2×10² + 5×10¹ + 7×10⁰ = 200 + 50 + 7 = 257
其他根据 R 进制对应底数是 R,以此类推。
三、十进制转其他进制
1. 整数部分:除R取余,逆序排列
例1:十进制 45 → 二进制
45 ÷ 2 = 22 ... 余 1
22 ÷ 2 = 11 ... 余 0
11 ÷ 2 = 5 ... 余 1
5 ÷ 2 = 2 ... 余 1
2 ÷ 2 = 1 ... 余 0
1 ÷ 2 = 0 ... 余 1
从下往上读余数:101101
例 2:十进制 45 → 八进制
45 ÷ 8 = 5 ... 余 5
5 ÷ 8 = 0 ... 余 5
从下往上读余数:55
验证:5×8¹ + 5×8⁰ = 40 + 5 = 45
例 3:十进制 45 → 十六进制
45 ÷ 16 = 2 ... 余 13(即 D)
2 ÷ 16 = 0 ... 余 2
从下往上读余数:2D
验证:2×16¹ + 13×16⁰ = 32 + 13 = 45
例 4:十进制 200 → 八进制
2. 小数部分:乘R取整,顺序排列
例:十进制 0.625 → 二进制
0.625 × 2 = 1.25 → 取整 1
0.25 × 2 = 0.5 → 取整 0
0.5 × 2 = 1.0 → 取整 1
小数部分变为 0,转换结束。
从上往下读整数:0.101 ( 小数转出来的 101 本身也是一个二进制数,如果不加小数点,它会被理解成整数101(十进制 5),而不是 0.101(十进制 0.625)。)
例 2:十进制 0.625 → 八进制
0.625 × 8 = 5.0 → 取整 5
小数部分变为 0,转换结束。
从上往下读整数:0.5
验证:5×8⁻¹ = 5×0.125 = 0.625
例 3:十进制 0.625 → 十六进制
0.625 × 16 = 10.0 → 取整 10(即 A)
小数部分变为 0,转换结束。
从上往下读整数:0.A
验证:10×16⁻¹ = 10×0.0625 = 0.625
例 4:十进制 0.1 → 八进制(用于展示除不尽、无限循环的情况)
0.1 × 8 = 0.8 → 取整 0
0.8 × 8 = 6.4 → 取整 6
0.4 × 8 = 3.2 → 取整 3
0.2 × 8 = 1.6 → 取整 1
0.6 × 8 = 4.8 → 取整 4
0.8 × 8 = 6.4 → 取整 6 ← 开始循环
...
结果:0.063146...(无限循环,无法精确表示)
3. 整数部分和小数部分要拼回去,小数点不能丢
示例1:十进制数 45.625 转二进制
45.625
├── 整数部分 45 → 除2取余逆读 → 101101
└── 小数部分 0.625 → 乘2取整顺读 → 101
最后拼起来:
45.625₍₁₀₎ = 101101.101₍₂₎
注:这里的(10) 和 (2 ) 对应 十进制 和 二进制
示例2:十进制数 45.625 转八进制
45.625
├── 整数部分 45 → 除8取余逆读 → 55
└── 小数部分 0.625 → 乘8取整顺读 → 5
最后拼起来:
45.625₍₁₀₎ = 55.5₍₈₎
验证:5×8¹ + 5×8⁰ + 5×8⁻¹ = 40 + 5 + 0.625 = 45.625
示例3:十进制数 45.625 转十六进制
45.625
├── 整数部分 45 → 除16取余逆读 → 2D
└── 小数部分 0.625 → 乘16取整顺读 → A
最后拼起来:
45.625₍₁₀₎ = 2D.A₍₁₆₎
验证:2×16¹ + 13×16⁰ + 10×16⁻¹ = 32 + 13 + 0.625 = 45.625
整数部分
... 2² 2¹ 2⁰
↑ ↑ ↑
高位 低位
越往左,权越大。所以除基取余时,先得到的余数是低位,要逆序读才能得到正确结果。
小数部分2⁻¹ 2⁻² 2⁻³ ...
↑ ↑ ↑
高位 低位
越往左,权越大 ;越往右,权越小。所以第一个乘出来的整数,对应的是 2⁻¹ 位,也就是小数点后第一位。
0.101₍₂₎ = 1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 0.5 + 0 + 0.125 = 0.625
四、二进制与八进制、十六进制的快速转换
这是最常用的技巧,因为 8=2³,16=2⁴。
二进制 ↔ 八进制(3 位一组)
例:二进制 10110101 → 八进制
从右往左每 3 位分组,不足补 0:
010 110 101
2 6 5
结果:265
二进制 ↔ 十六进制(4 位一组)
例:二进制 10110101 → 十六进制
从右往左每 4 位分组:
1011 0101
B 5
结果:B5
反向转换
例 1:八进制 72 → 二进制
7 → 111
2 → 010
结果:111010(去掉前导 0 为 111010)
验证:7×8¹ + 2×8⁰ = 56 + 2 = 58
111010₍₂₎ = 32+16+8+0+2+0 = 58
例 3:十六进制 3A → 二进制
3 → 0011
A → 1010
结果:00111010(去掉前导 0 为 111010)
验证:3×16¹ + 10×16⁰ = 48 + 10 = 58
111010₍₂₎ = 32+16+8+0+2+0 = 58
五、常用对照表
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
六、总规律
任何进制转十进制,本质都是一句话:
每一位数字 × 这一位的权重,然后全部加起来。
权重怎么来?
-
整数部分:从右往左,第 0 位、第 1 位、第 2 位......
-
小数部分:从左往右,第 -1 位、第 -2 位、第 -3 位......
对于 R 进制:
第 i 位的权重 = Rⁱ
所以:
十进制值=∑(该位数字 × Rⁱ)
一、二进制
二进制基数 R = 2。
权重:
| 位置 | 权重 |
|---|---|
| 整数第0位 | 2⁰ = 1 |
| 整数第1位 | 2¹ = 2 |
| 整数第2位 | 2² = 4 |
| 整数第3位 | 2³ = 8 |
| 小数第1位 | 2⁻¹ = 0.5 |
| 小数第2位 | 2⁻² = 0.25 |
1. 只有整数部分
例:二进制 101
从右往左写权重:
二进制: 1 0 1
位置: 2 1 0
权重: 4 2 1
计算:
1×4+0×2+1×1=4+0+1=5
所以:
101₍₂₎ = 5₍₁₀₎
原始过程:
最右边是第0位,权重 2⁰ = 1
中间是第1位,权重 2¹ = 2
最左边是第2位,权重 2² = 4
是 1 就加对应权重,是 0 就不加
2. 只有小数部分
例:二进制 0.101
从小数点后第一位开始:
二进制: 0 . 1 0 1
位置: -1 -2 -3
权重: 0.5 0.25 0.125
计算:
1×0.5+0×0.25+1×0.125=0.5+0+0.125=0.625
所以:
0.101₍₂₎ = 0.625₍₁₀₎
原始过程:
小数点后第1位,权重 2⁻¹ = 0.5
小数点后第2位,权重 2⁻² = 0.25
小数点后第3位,权重 2⁻³ = 0.125
仍然是:数字 × 权重,然后相加
3. 整数部分 + 小数部分
例:二进制 101.101
拆成两半:
整数部分:
101₍₂₎ = 4 + 0 + 1 = 5
小数部分:
0.101₍₂₎ = 0.5 + 0 + 0.125 = 0.625
合起来:
101.101₍₂₎ = 5.625₍₁₀₎
原始过程:
二进制: 1 0 1 . 1 0 1
位置: 2 1 0 -1 -2 -3
权重: 4 2 1 0.5 0.25 0.125
计算:
1×4+0×2+1×1+1×0.5+0×0.25+1×0.125=4+0+1+0.5+0+0.125=5.625
二、八进制
八进制基数 R = 8。
权重:
| 位置 | 权重 |
|---|---|
| 整数第0位 | 8⁰ = 1 |
| 整数第1位 | 8¹ = 8 |
| 整数第2位 | 8² = 64 |
| 整数第3位 | 8³ = 512 |
| 小数第1位 | 8⁻¹ = 0.125 |
| 小数第2位 | 8⁻² = 0.015625 |
例:八进制 2571. 只有整数部分
从右往左:
八进制: 2 5 7
位置: 2 1 0
权重: 64 8 1
计算:
2×64+5×8+7×1=128+40+7=175
所以:
257₍₈₎ = 175₍₁₀₎
2. 只有小数部分
例:八进制 0.25
八进制: 0 . 2 5
位置: -1 -2
权重: 0.125 0.015625
计算:
2×0.125+5×0.015625=0.25+0.078125=0.328125
所以:
0.25₍₈₎ = 0.328125₍₁₀₎
3. 整数部分 + 小数部分
例:八进制 257.25
整数部分:
257₍₈₎ = 175₍₁₀₎
小数部分:
0.25₍₈₎ = 0.328125₍₁₀₎
合起来:
257.25₍₈₎ = 175.328125₍₁₀₎
三、十进制
十进制基数 R = 10。
其实我们平时写的十进制数,本身就是按权展开的结果。
权重:
| 位置 | 权重 |
|---|---|
| 整数第0位 | 10⁰ = 1 |
| 整数第1位 | 10¹ = 10 |
| 整数第2位 | 10² = 100 |
| 小数第1位 | 10⁻¹ = 0.1 |
| 小数第2位 | 10⁻² = 0.01 |
例:十进制 2571. 只有整数部分
十进制: 2 5 7
权重: 100 10 1
计算:
2×100+5×10+7×1=200+50+7=257
2. 只有小数部分
例:十进制 0.25
十进制: 0 . 2 5
权重: 0.1 0.01
计算:
2×0.1+5×0.01=0.2+0.05=0.25
四、十六进制
十六进制基数 R = 16。
数字:0 1 2 3 4 5 6 7 8 9 A B C D E F
其中:
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15
权重:
| 位置 | 权重 |
|---|---|
| 整数第0位 | 16⁰ = 1 |
| 整数第1位 | 16¹ = 16 |
| 整数第2位 | 16² = 256 |
| 整数第3位 | 16³ = 4096 |
| 小数第1位 | 16⁻¹ = 0.0625 |
| 小数第2位 | 16⁻² = 0.00390625 |
例:十六进制 2F1. 只有整数部分
先转换字母:
F = 15
从右往左:
十六进制: 2 F
位置: 1 0
权重: 16 1
数字: 2 15
计算:
2×16+15×1=32+15=47
所以:
2F₍₁₆₎ = 47₍₁₀₎
2. 只有小数部分
例:十六进制 0.8
十六进制: 0 . 8
位置: -1
权重: 0.0625
数字: 8
计算:
8×0.0625=0.5
所以:
0.8₍₁₆₎ = 0.5₍₁₀₎
3. 整数部分 + 小数部分
例:十六进制 2F.8
整数部分:
2F₍₁₆₎ = 47₍₁₀₎
小数部分:
0.8₍₁₆₎ = 0.5₍₁₀₎
合起来:
2F.8₍₁₆₎ = 47.5₍₁₀₎