这一篇把「二进制、八进制、十进制、十六进制」之间的相互转换整理成一份速查表,每一种都配一个具体例子的手工计算步骤。

记号约定:

  • 数字后缀 (B)=二进制、(O)=八进制、(D)=十进制、(H)=十六进制
  • 十六进制字母 (\text{A}=10)、(\text{B}=11)、(\text{C}=12)、(\text{D}=13)、(\text{E}=14)、(\text{F}=15)

一、四个核心概念

1. 基数

进制就是「每一位上能用几个数字」。每进一位就乘一次基数 (r):

进制 基数 (r) 数字范围
二进制 (B) 2 0, 1
八进制 (O) 8 0 ~ 7
十进制 (D) 10 0 ~ 9
十六进制 (H) 16 0 ~ F

2. 位权

第 (i) 位(从右往左,从 (0) 开始数)的权值是 (r^i)。例如二进制 10110(5 位)的位权依次是 (2^4, 2^3, 2^2, 2^1, 2^0):

1
2
3
位号: 4 3 2 1 0
数字: 1 0 1 1 0
位权: 16 8 4 2 1

3. 按权展开(任意进制 → 十进制的通用公式)

[
(N)r = \sum{i=0}^{k-1} d_i \cdot r^i
[其中 (d_i) 是第 (i) 位上的数字,(r) 是基数,(k) 是位数。

4. 整数部分与小数部分分开做

进制转换对整数部分和小数部分用的是两套规则,永远分开算:

部分 规则 方向
整数 除 (r) 取余,倒序排列 任何进制 ↔ 十进制
小数 乘 (r) 取整,正序排列 十进制 ↔ 任何进制

二、整数部分转换

2.1 二进制 → 十进制:按权展开

例:(10110_{(B)} = ?)

按权展开(与上表对应):]
10110{(B)} = 1 \times 2^4 + 0 \times 2^3 + 1 \times 2^2 + 1 \times 2^1 + 0 \times 2^0 = 16 + 0 + 4 + 2 + 0 = 22{(D)}
[### 2.2 二进制 → 八进制:「421 法」

每 3 位一组(从右往左分),不够的左侧补 0。每组按 (4, 2, 1) 三位权重相加。

例:(10110_{(B)})

1
2
3
4
5
6
原始:        1 0 1 1 0
补零: 0 1 0 1 1 0 ← 左侧补一个 0 凑齐 6 位
分组: 010 110
位权: 421 421
权重相加: 0+2+0 1+2+0 ← 421 法:0 去掉、1 留下相加
结果: 2 6

所以 (10110{(B)} = 26{(O)})。

421 法速记:每组只有 3 位,所以权重就是 (4 = 2^2)、(2 = 2^1)、(1 = 2^0)。记不住展开式就直接写 421。

2.3 二进制 → 十六进制:「8421 法」

每 4 位一组(从右往左分),不够的左侧补 0。每组按 (8, 4, 2, 1) 四位权重相加;如果和 ≥ 10,转换成 A~F。

例:(101101_{(B)})

1
2
3
4
5
6
7
原始:        1 0 1 1 0 1
补零: 0 0 1 0 1 1 0 1 ← 左侧补两个 0 凑齐 8 位
分组: 0010 1101
位权: 8421 8421
权重相加: 0+0+2+0 1+2+0+...
= 2 13 ← 13 对应 D
结果: 2 D

所以 (101101{(B)} = 2D{(H)})。

2.4 十进制 → 二进制:短除法

除 2 取余,倒序排列。

例:(26{(D)} = ?{(B)})

1
2
3
4
5
6
        商     余数
26 / 2 = 13 ... 0 ↑
13 / 2 = 6 ... 1 | 从下往上读
6 / 2 = 3 ... 0 |
3 / 2 = 1 ... 1 |
1 / 2 = 0 ... 1 ↓

倒序读余数:(11010{(B)})。所以 (26{(D)} = 11010_{(B)})。

「除到 0 为止」:商变成 0 就停,最后一个 1 是被 2 除出来的,不是循环的一部分。

2.5 八进制 → 二进制:每位展 3 位

每位八进制数字对应 3 位二进制(421 法反过来),不够 3 位的左侧补 0。

例:(26{(O)} = ?{(B)})

1
2
八进制每位:   2      6
展成 3 位: 010 110

拼起来:(010110{(B)})。所以 (26{(O)} = 010110_{(B)})。

2.6 十六进制 → 二进制:每位展 4 位

每位十六进制数字对应 4 位二进制(8421 法反过来),不够 4 位的左侧补 0。

例:(5C2{(H)} = ?{(B)})

1
2
十六进制每位:   5      C(=12)    2
展成 4 位: 0101 1100 0010

拼起来:(0101\,1100\,0010_{(B)})。

2.7 通用公式:十进制 ↔ 任意进制 (r)

方向 公式
(r) 进制 → 十进制 按权展开:(N = \sum d_i r^i)
十进制 → (r) 进制 除 (r) 取余,倒序

对于 (r = 8)、(r = 16) 来说,这套规则都成立,只是运算慢、不如「二进制中转」快。


三、小数部分转换

3.1 二进制 → 十进制:还是按权展开

只不过小数位的权值是 (r^{-i})。

例:(11.101{(B)} = ?{(D)})

[
1 \times 2^1 + 1 \times 2^0 + 1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3}
= 2 + 1 + 0.5 + 0 + 0.125 = 3.625_{(D)}
]

3.2 十进制 → 二进制:乘 2 取整

整数部分仍用「除 2 取余」,小数部分用「乘 2 取整」,正向排列。

例:(0.625{(D)} = ?{(B)})

1
2
3
4
        整数    小数
0.625 × 2 = 1 + 0.250 ← 取 1
0.250 × 2 = 0 + 0.500 ← 取 0
0.500 × 2 = 1 + 0.000 ← 取 1

正序读整数部分:(101{(B)})。所以 (0.625{(D)} = 0.101_{(B)})。

何时停止:小数部分变成 0 就停。如果一直不变成 0(比如 (0.1_{(D)})),就只能取到你想要的精度为止。

3.3 二进制小数 ↔ 八进制、十六进制小数

按整数部分同样的「分组法」做,只是从小数点开始往两边分组:

转换 分组方向 起点
二进制小数 → 八进制 小数点起向左、向右每 3 位一组 小数点
二进制小数 → 十六进制 小数点起向左、向右每 4 位一组 小数点

例:(11.101{(B)} = ?{(O)})

1
2
3
4
       11.101
分组: 011 . 101 ← 整数部分左侧补 0 凑 3 位;小数部分恰好是 3 位
位权: 421 . 421
相加: 3 . 5

所以 (11.101{(B)} = 3.5{(O)})。


四、八进制 ↔ 十进制

4.1 十进制 → 八进制

两种方法:

  • 间接法:先转二进制,再 3 位 1 组转八进制
  • 直接法:除 8 取余,倒序排列(与十进制 → 二进制一模一样,只是除数换成 8)

例:(26{(D)} = ?{(O)})

1
2
3
4
直接法:
26 / 8 = 3 ... 2
3 / 8 = 0 ... 3
倒序: 32

所以 (26{(D)} = 32{(O)})。

4.2 八进制 → 十进制

  • 间接法:先转二进制,再按权展开
  • 直接法:按权展开((8^i) 为权)

五、十进制 ↔ 十六进制

与八进制完全对称,只是基数换成 16。

例:(43{(D)} = ?{(H)})

1
2
3
4
直接法:
43 / 16 = 2 ... 11 ← 11 对应十六进制的 B
2 / 16 = 0 ... 2
倒序: 2B

所以 (43{(D)} = 2B{(H)})。

反过来 (2B{(H)} = 2 \times 16 + 11 = 32 + 11 = 43{(D)})。


六、记忆口诀表

想做的事 公式 / 方法
任意进制 → 十进制 按权展开((d_i \cdot r^i) 求和)
十进制 → 任意进制(整数) 除 (r) 取余,倒序排列
十进制 → 任意进制(小数) 乘 (r) 取整,正序排列
二进制 ↔ 八进制 421 法:3 位一组
二进制 ↔ 十六进制 8421 法:4 位一组
八进制 ↔ 十六进制 走二进制:先 ↔ 二进制,再 ↔ 另一边

记住「按权展开 + 短除法」这两个最根本的,剩下的 421 / 8421 都是在它们基础上简化而来。

七、易错点清单

  1. 分组时忘记补 0:从右往左分,不够 3 位(或 4 位)要左侧补 0,不能右侧补。
  2. 小数部分从左往右分:整数分组从右往左、小数分组从左往右,方向别搞反。
  3. 十六进制字母写错:(11 = B)、(12 = C)、(13 = D)……不是 (B = 12)。
  4. 十进制小数转二进制乘 2 取整时忘了停止条件:乘到小数部分变 0 才停,否则位数会无限。
  5. 短除法算到最后商变 0 但忘了取最后一个余数:最后那个余数 (1)(除以基数前的最后一位)一定要写上。