欢迎来到进位制的世界!
你好!本章是理解计算机如何存储和处理所有数据(从你最喜欢的照片到游戏中的指令)的基础。这一切的核心,就是我们如何进行计数!
我们每天都在使用十进制,但计算机需要一套更简单的系统,因为电子设备的状态要么是“通”(ON),要么是“断”(OFF)。这就是二进制和十六进制发挥作用的地方。
如果起初觉得有些复杂,别担心! 我们将通过简单的类比来拆解这些复杂的概念,确保你能够掌握这些核心技能。让我们开始吧!
计算机为什么要使用不同的进位制?(数据表示背景)
你使用十进制(基数为 10)是因为你有十根手指。然而,计算机是由电子开关组成的。这些开关只能处于以下两种状态之一:
- ON(通电状态,意味着电流正在流动)
- OFF(断电状态,意味着电流没有流动)
这种 ON/OFF 系统非常适合二进制,它只使用两个数字:1 和 0。
1. 十进制(基数为 10):我们熟悉的系统
十进制(Denary)是你日常生活中使用的编号系统。它也称为基数为 10,因为它使用了 10 个不同的数字(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)。
理解位值(Place Value)
在十进制中,数字的位置决定了它的数值。这些位置是 10 的幂:
示例:数字 345
- 5 位于 \(10^0\)(个位)列 = \(5 \times 1\) = 5
- 4 位于 \(10^1\)(十位)列 = \(4 \times 10\) = 40
- 3 位于 \(10^2\)(百位)列 = \(3 \times 100\) = 300
十进制只是起点,但理解这里的位值是掌握二进制的关键!
2. 二进制(基数为 2):计算机的语言
二进制(Binary)是计算机使用的编号系统。它被称为基数为 2,因为它只使用两个数字:0 和 1。
- 单个二进制数字(0 或 1)称为位(Bit,即 Binary Digit)。
- 八个位组成一个字节(Byte)。
二进制位值
就像十进制使用 10 的幂一样,二进制使用 2 的幂。我们通常使用 8 位(一个字节)来进行标准的数据表示。
8 位二进制数的位值(权重)为:
\(2^7\), \(2^6\), \(2^5\), \(2^4\), \(2^3\), \(2^2\), \(2^1\), \(2^0\)
计算后得到的权重是:
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1
快速回顾: 每个 1 表示开关处于 ON(该值被计入);每个 0 表示开关处于 OFF(该值被忽略)。
3. 二进制转换为十进制
这通常是最简单的转换!我们使用刚才学习的位值列即可。
分步转换:二进制转十进制
目标: 将二进制数 10110010 转换为十进制。
- 写出 8 位位值(权重):
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1
- 将二进制数写在下方:
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 - 找出标记为 '1' 的列(即“ON”开关):
128, 32, 16 和 2
- 将对应的值相加:
\(128 + 32 + 16 + 2 = 178\)
- 得出最终结果:
10110010 的十进制等值为 178。
核心要点: 二进制转十进制只需将出现 '1' 的位值相加即可。
4. 十进制转换为二进制
这种转换需要计算出要凑成该十进制数需要哪些 2 的幂(哪些列)。我们使用减法法。
分步转换:十进制转二进制
目标: 将十进制数 210 转换为二进制。
- 从最大的可能位值(128)开始:
能否从 210 中减去 128?可以。
210 - 128 = 82
结果:在 128 列下方填入 1。 - 移至下一列(64):
能否从剩余的 82 中减去 64?可以。
82 - 64 = 18
结果:在 64 列下方填入 1。 - 继续进行后续列的计算:
- 32: 能否从 18 中减去 32?不能。(填 0)
- 16: 能否从 18 中减去 16?可以。 18 - 16 = 2(填 1)
- 8: 能否从 2 中减去 8?不能。(填 0)
- 4: 能否从 2 中减去 4?不能。(填 0)
- 2: 能否从 2 中减去 2?可以。 2 - 2 = 0(填 1)
- 1: 剩余数字为 0。(填 0)
- 读取最终的二进制代码:
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0
210 的二进制等值为 11010010。
需要避免的常见错误: 务必确保每次减法都是针对*剩余*的总数,而不是原始数字!
5. 十六进制(基数为 16):速记工具
二进制对计算机来说很完美,但长串的 1 和 0 对于人类来说很难阅读、书写和记忆,且极易出错!
十六进制(Hexadecimal,简称 Hex)被用作一种快捷方式。它被称为基数为 16,因为它使用了 16 个唯一的字符。
16 个十六进制数字
十六进制使用 0 到 9 的数字,以及字母 A 到 F 来表示 10 到 15 的值:
| 十六进制位 | 十进制值 | 二进制值(4位) |
|---|---|---|
| 0 | 0 | 0000 |
| ... | ... | ... |
| 9 | 9 | 1001 |
| A | 10 | 1010 |
| B | 11 | 1011 |
| C | 12 | 1100 |
| D | 13 | 1101 |
| E | 14 | 1110 |
| F | 15 | 1111 |
你知道吗? 十六进制在处理内存地址、错误代码和定义颜色(例如纯红色的网页代码 #FF0000)时非常常见。
6. 二进制与十六进制之间的转换
十六进制的妙处在于,一个十六进制位正好可以完美表示四个二进制位(称为半字节,nibble)。
由于一个字节是 8 位,因此两个十六进制位就可以完美代表一个字节。
A) 二进制转十六进制
目标: 将二进制数 11011001 转换为十六进制。
- 从右向左将二进制数分为四位一组(半字节):
1101 | 1001
- 将每组转换为对应的十进制值:
- 第 1 组 (1101): \(8 + 4 + 0 + 1 = 13\)
- 第 2 组 (1001): \(8 + 0 + 0 + 1 = 9\)
- 将十进制值转换为十六进制等值:
- 十进制 13 在十六进制中是 D
- 十进制 9 在十六进制中是 9
- 合并十六进制位:
11011001 的十六进制等值为 D9。
B) 十六进制转二进制
这是反向过程:取每个十六进制位,写出其对应的 4 位二进制代码。
目标: 将十六进制数 A5 转换为二进制。
- 处理第一位 (A):
A 在十进制中等于 10。10 的 4 位二进制代码是 1010。
- 处理第二位 (5):
5 在十进制中等于 5。5 的 4 位二进制代码是 0101。
- 合并这两个 4 位组:
A5 的二进制等值为 10100101。
C) 十进制转十六进制
将十进制转换为十六进制(或反之)最简单的方法是以二进制作为中间桥梁。这可以使计算方法保持简单,并减少错误。
示例:将十进制 150 转换为十六进制:
- 十进制 150 -> 二进制: 使用减法法,得到 10010110。
- 二进制 10010110 -> 十六进制: 分为半字节:1001 和 0110。
- 1001 是 9。0110 是 6。
- 结果:96(十六进制)。
进位制快速回顾
三种进位制
- 十进制(基数为 10): 数字 0-9。人类使用。位值是 10 的幂(1, 10, 100...)。
- 二进制(基数为 2): 数字 0, 1。计算机使用。位值是 2 的幂(1, 2, 4, 8...)。
- 十六进制(基数为 16): 数字 0-9 和 A-F。作为人类可读的二进制速记法。
记忆小贴士:十六进制字母
记住 'F' 是最大的单个十六进制数字(十进制中的 15,或二进制中的 1111)。
恭喜!你现在已经掌握了数据表示的基本工具。请继续练习这些转换——它们是考试中至关重要的技能!