一、为什么计算机使用二进制?
计算机内部由无数个电子开关(晶体管)组成,每个开关只有两种状态:开(通电) 和 关(断电)。这两种状态正好用 1 和 0 表示。所以计算机最自然地使用二进制。
-
二进制:只有 0 和 1,逢二进一。
-
优点:物理实现简单、抗干扰强、运算规则简单。
-
缺点:人读写不方便,一串 0/1 容易看错。
为了解决这个缺点,我们引入 八进制 和 十六进制 作为二进制的“缩写”。
二、三种进制的基本概念
| 进制 | 基数 | 可用数字 | 前缀(编程中) | 后缀(汇编中) |
|---|---|---|---|---|
| 二进制 | 2 | 0,1 | 0b 或 0B | B |
| 八进制 | 8 | 0~7 | 0o 或 0O | Q 或 O |
| 十六进制 | 16 | 0~9, A~F | 0x 或 0X | H |
十六进制中 A—F与10进制数的关系:A=10, B=11, C=12, D=13, E=14, F=15。
位权:每个数字所在位置代表的数值大小。
-
例如十进制 123 = 1×10² + 2×10¹ + 3×10⁰
-
二进制 1011 = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8+0+2+1 = 11
-
八进制 127 = 1×8² + 2×8¹ + 7×8⁰ = 64+16+7 = 87
-
十六进制 2F = 2×16¹ + 15×16⁰ = 32+15 = 47
三、为什么用八进制和十六进制?
-
八进制:1 位八进制 = 3 位二进制(因为 2³=8)。
在早期计算机(如 12 位、24 位字长)中,按 3 位分组很方便。
现在 Linux 文件权限仍然用八进制:chmod 755中的 7、5、5 分别代表读+写+执行、读+执行、读+执行。 -
十六进制:1 位十六进制 = 4 位二进制(因为 2⁴=16)。
现代计算机普遍以 8 位(1 字节)为基本单位,1 字节正好用 2 位十六进制表示。
例如:0xFF= 二进制1111 1111= 十进制 255。
总结:八进制和十六进制是为了方便人类读写二进制而创造的。
四、相互转换方法(大量实例)
1. 二进制 ↔ 十进制
(1)二 → 十:按权展开求和。
例:1101 1010
= 1×2⁷ + 1×2⁶ + 0×2⁵ + 1×2⁴ + 1×2³ + 0×2² + 1×2¹ + 0×2⁰
= 128 + 64 + 0 + 16 + 8 + 0 + 2 + 0 = 218
(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
逆序:101101 → 45 = 101101₂
2. 二进制 ↔ 八进制
(1)二 → 八:从右向左,每 3 位一组,不足左边补 0。
例:11010110
分组:011 010 110
每组转十进制:3, 2, 6 → 326₈
(2)八 → 二:每位八进制展开为 3 位二进制。
例:753₈
7 → 111,5 → 101,3 → 011 → 111101011₂
3. 二进制 ↔ 十六进制
(1)二 → 十六:从右向左,每 4 位一组,不足补 0。
例:110110101
补 0:0001 1011 0101
分组转十六:1, B, 5 → 1B5₁₆
(2)十六 → 二:每位十六进制展开为 4 位二进制。
例:A3F₁₆
A → 1010,3 → 0011,F → 1111 → 101000111111₂
4. 十进制 ↔ 八进制 / 十六进制
(1)十 → 八:除 8 取余,逆序。
例:100
100 ÷ 8 = 12 余 4
12 ÷ 8 = 1 余 4
1 ÷ 8 = 0 余 1
逆序:144₈
(2)十 → 十六:除 16 取余,逆序。
例:255
255 ÷ 16 = 15 余 15 (F)
15 ÷ 16 = 0 余 15 (F)
逆序:FF₁₆
八 → 十:按权展开。
例:144₈ = 1×64 + 4×8 + 4 = 64+32+4 = 100
十六 → 十:按权展开。
例:FF₁₆ = 15×16 + 15 = 240+15 = 255
5. 八进制 ↔ 十六进制
通常先转成二进制,再分组。
例:326₈ → 二进制 011 010 110 → 补成四位:0011 0101 1010?
等等,326₈ = 3→011, 2→010, 6→110,连起来 011010110,从右向左四位分组:0 1101 0110,即 D6₁₆。
验证:326₈ = 3×64+2×8+6 = 192+16+6 = 214;D6₁₆ = 13×16+6 = 208+6 = 214。正确。
五、计算机领域中的实际用途
-
内存地址:调试器、反汇编中常见
0x00401000,十六进制。 -
颜色代码:网页颜色
#FF0000表示红色,每两位十六进制代表 R、G、B 分量(00~FF)。 -
文件权限:Linux
chmod 755,7=读+写+执行,5=读+执行。 -
网络 MAC 地址:
00:1A:2B:3C:4D:5E,每字节两位十六进制。 -
IPv6 地址:
2001:0db8:85a3:0000:0000:8a2e:0370:7334,用十六进制表示。 -
位运算与掩码:如
x & 0xFF取低 8 位,0x0F取低 4 位。 -
汇编语言:立即数常用十六进制,如
MOV AX, 0x1A。 -
Unicode 码点:
U+4E2D表示汉字“中”。
六、快速转换技巧
-
记住常见值:
-
1 位十六进制 = 4 位二进制
-
1 位八进制 = 3 位二进制
-
1 字节 = 8 位 = 2 位十六进制
-
0xFF = 255, 0x100 = 256
-
-
二进制转十六进制:从右向左四位一组,直接查表:
二进制 十六进制 0000 0 0001 1 0010 2 ... ... 1111 F -
十六进制转二进制:每位拆成 4 位。
七、课堂练习(建议学生动手)
-
将二进制
1011 0101转换为十进制、八进制、十六进制。 -
将十进制
200转换为二进制、八进制、十六进制。 -
将十六进制
2A7转换为二进制、八进制、十进制。 -
将八进制
527转换为二进制、十六进制、十进制。 -
已知颜色代码
#3A7F2B,写出其 RGB 三个分量的十进制值。
答案参考:
-
10110101₂= 181₁₀ = 265₈ = B5₁₆ -
200₁₀ = 11001000₂ = 310₈ = C8₁₆
-
2A7₁₆= 0010 1010 0111₂ = 1247₈ = 679₁₀ -
527₈= 101 010 111₂ = 157₁₆ = 343₁₀ -
#3A7F2B → R=3A₁₆=58,G=7F₁₆=127,B=2B₁₆=43
八、总结
-
二进制是计算机的“母语”,八进制和十六进制是它的“方言”,方便人类阅读。
-
掌握转换的核心:按权展开(任意进制转十进制)和除基取余(十进制转任意进制)。
-
二进制与八/十六进制转换:分组法(3位一组或4位一组)。
-
多练习,形成条件反射,对后续学习汇编、操作系统、网络等课程至关重要。
希望这份讲解能帮助大家轻松理解数制!