3.2 · 数制
目标: 在十进制、二进制、十六进制之间自如双向换算,并能完整展示过程。
课程涉及的三种数制
| 数制 | 基 | 使用数字 |
|---|---|---|
| 十进制 Denary (decimal) | 10 | 0 1 2 3 4 5 6 7 8 9 |
| 二进制 Binary | 2 | 0 1 |
| 十六进制 Hexadecimal (hex) | 16 | 0 1 2 3 4 5 6 7 8 9 A B C D E F |
会要求你在任何两种之间、双向换算。
位值,通用思想
任何数制都有以基数幂为单位的位值。
十进制(基 10)
| 位 | 1000 | 100 | 10 | 1 |
|---|---|---|---|---|
| 幂 | 10³ | 10² | 10¹ | 10⁰ |
| 数字 | 2 | 3 | 7 | 4 |
2 × 1000 + 3 × 100 + 7 × 10 + 4 × 1 = 2374
二进制(基 2)
| 位 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| 幂 | 2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ |
| 数字 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
128 + 32 + 16 + 4 + 1 = 181₁₀
十六进制(基 16)
| 位 | 4096 | 256 | 16 | 1 |
|---|---|---|---|---|
| 幂 | 16³ | 16² | 16¹ | 16⁰ |
| 数字 | 0 | 2 | A | 7 |
2 × 256 + 10 × 16 + 7 × 1 = 679₁₀
速查表(0–15)
这张表你必须完全背下来。
| 十进制 | 二进制(4 位) | 十六进制 |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 2 | 0010 | 2 |
| 3 | 0011 | 3 |
| 4 | 0100 | 4 |
| 5 | 0101 | 5 |
| 6 | 0110 | 6 |
| 7 | 0111 | 7 |
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 12 | 1100 | C |
| 13 | 1101 | D |
| 14 | 1110 | E |
| 15 | 1111 | F |
十进制 → 二进制
方法 1 · 连续除 2
反复除 2,余数自底向上读。
转换 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 ← 顶2
3
4
5
6
自底向上读 → 101101₂。
方法 2 · 减最大的 2 的幂
| 2 的幂 | 用? | 余 |
|---|---|---|
| 32 | ✓ | 45 − 32 = 13 |
| 16 | ✗ | 13 |
| 8 | ✓ | 13 − 8 = 5 |
| 4 | ✓ | 5 − 4 = 1 |
| 2 | ✗ | 1 |
| 1 | ✓ | 1 − 1 = 0 |
结果:101101₂。
二进制 → 十进制
把每位乘以位值再相加。
11010110₂ → 128 + 64 + 16 + 4 + 2 = 214₁₀。
技巧:相加前把位值写在每位上方。
十进制 → 十六进制
方法 1 · 连续除 16
转换 2750₁₀:
2750 ÷ 16 = 171 余 14 (E)
171 ÷ 16 = 10 余 11 (B)
10 ÷ 16 = 0 余 10 (A) ← 顶2
3
自底向上读 → ABE₁₆。
方法 2 · 经二进制
先转二进制,然后每 4 位一组(从右到左)。
2750₁₀ = 1010 1011 1110₂ → A B E → ABE₁₆。
十六进制 → 十进制
把每位乘以位值再相加。
3F₁₆ = 3 × 16 + 15 × 1 = 63₁₀
二进制 ↔ 十六进制(捷径)
这种转换最快,因为 1 位十六 = 4 位二进。
二进制 : 1101 1010 0011 1111
D A 3 F
十六 : D A 3 F2
3
记熟 0–15 表后,两个方向都是秒级。
转十六前先把二进制每 4 位分组
- 从右开始分组:
11010100110₂→0110 1010 0110(前补 0)。 - 然后读:
6 A 6→6A6₁₆。
常见换算练习
| 十进制 | 二进制 | 十六 |
|---|---|---|
| 13 | 1101 | D |
| 25 | 11001 | 19 |
| 100 | 1100100 | 64 |
| 255 | 11111111 | FF |
| 256 | 100000000 | 100 |
| 1024 | 10000000000 | 400 |
| 65535 | 1111111111111111 | FFFF |
记 255 = 0xFF 和 65535 = 0xFFFF 能省考试时间。
我需要多少位?
对无符号整数 N,所需位数是 ⌈log₂(N+1)⌉。
| 范围 | 需要位数 |
|---|---|
| 0–1 | 1 |
| 0–3 | 2 |
| 0–7 | 3 |
| 0–15 | 4 |
| 0–255 | 8 |
| 0–1023 | 10 |
| 0–65535 | 16 |
n 位能表示 2ⁿ 个不同值。任意小 n 都应该能推得出来。
为什么要有十六进制?
电脑是二进制的。为什么还要十六?
- 紧凑 —— 1 位十六代替 4 位二进。
- 可读 —— RGB 颜色
#FF8800比11111111 10001000 00000000清楚得多。 - 易位映射 —— 每位十六整齐对应 4 位二进。
- 地址标准 —— MAC 地址、IPv6、内存转储都用十六。
学生常见错误
- 把除法余数从顶往下读(应自底向上)。
- 忘了十六
A–F映射 10–15(写A = 11是常见滑笔)。 - 二进制分 4 位组时漏前导零 —— 先补足。
- 混淆基与位数。
练习活动
不用计算器换算:
87₁₀→ 二进制、十六0xC8→ 十进制、二进制10110101₂→ 十进制、十六0xBEEF→ 二进制255₁₀ + 1→ 二进制、十六
答案
1010111₂、57₁₆200₁₀、11001000₂181₁₀、B5₁₆1011 1110 1110 1111₂100000000₂、100₁₆
考试式题目
题(4 分): (a) 把
2024₁₀换为二进制,写出全部过程。(b) 把 (a) 的答案换为十六进制。
参考答案:
(a) 连续除 2:
2024 ÷ 2 = 1012 余 0
1012 ÷ 2 = 506 余 0
506 ÷ 2 = 253 余 0
253 ÷ 2 = 126 余 1
126 ÷ 2 = 63 余 0
63 ÷ 2 = 31 余 1
31 ÷ 2 = 15 余 1
15 ÷ 2 = 7 余 1
7 ÷ 2 = 3 余 1
3 ÷ 2 = 1 余 1
1 ÷ 2 = 0 余 12
3
4
5
6
7
8
9
10
11
2024₁₀ = 11111101000₂
(b) 从右每 4 位一组(前补 0):
0111 1110 1000 → 7 E 8 → 2024₁₀ = 7E8₁₆
关键要点
- 三种基:10、2、16。
- 掌握十进制 → 二进制的两种方法(连续除 + 减幂)。
- 1 位十六 = 4 位二进是最快捷径。
- 把 0–15 在三种基下背熟。
➡️ 下一节:3.3 二进制运算与溢出