欢迎来到进位制的世界!
你有没有想过,电脑本质上不过是由数百万个微小的“开/关”开关所组成的,它是如何显示你最喜欢的游戏、视频和照片的呢?这一切都归结于我们如何表示数据。在本章中,我们将探讨进位制 (Number Bases)——这是电脑用来理解世界的不同“计数语言”。
别担心如果你还没觉得自己是个“数学高手”!我们将透过简单的技巧和清晰的例子,逐步为你拆解这些概念。学完之后,你就能像专业人士一样说“电脑语言”(二进制与十六进制)了。
1. 什么是进位制?
进位制 (Number Base)(或称基数/Radix)是指在特定计数系统中可用的数字个数。它告诉我们在必须“进位”到下一栏之前,我们可以使用多少个不同的符号。
计算机科学中常见的进位制:
- 十进制 (Decimal, Base 10):这是我们人类日常使用的!我们有十个数字(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)。想象一下用十根手指头来数数。
- 二进制 (Binary, Base 2):这是电脑的母语。它只有两个数字:0 和 1。电脑之所以使用这种进位制,是因为它们的硬件是由处于“关”(0) 或“开”(1) 状态的开关所组成的。
- 十六进制 (Hexadecimal, Base 16):这是程序员使用的“速记法”。它有 16 个数字:0–9 以及字母 A–F。
如何辨识进位制:
为了避免混淆,我们使用下标 (subscript) 来显示我们正在使用的进位制。
例子: \(67_{10}\) 是十进制,\(1011_{2}\) 是二进制,而 \(AE_{16}\) 是十六进制。
快速复习:基数告诉你拥有多少个符号。十进制有十个符号;二进制有两个符号。
2. 二进制 (Base 2):二的幂次方
在二进制中,每一栏位的数值都是其右侧栏位的两倍。我们称之为位值 (place values)。在十进制中,我们有个位、十位、百位。而在二进制中,我们则有个位、二位、四位、八位,以此类推。
二进制位值表 (以 8 个位元/1 个字节为例):
\(128\) | \(64\) | \(32\) | \(16\) | \(8\) | \(4\) | \(2\) | \(1\)
记忆小撇步:从最右边的 1 开始,向左移动时只需不断加倍即可!
例子:将 \(1011_{2}\) 转换为十进制
1. 将二进制数字放入你的位值表中:
(8位栏:1) | (4位栏:0) | (2位栏:1) | (1位栏:1)
2. 将所有标示为“1”的位值相加:
\(8 + 0 + 2 + 1 = 11_{10}\)
你知道吗?“Bit”(位元)这个词其实是 Binary Digit(二进制数字)的缩写!
3. 十六进制 (Base 16):速记工具
使用十六进制(或称“Hex”)是因为二进制字符串对人类来说太长且难以阅读。一个十六进制数字正好可以代表四个二进制位元(即一个半字节 Nibble)。
十六进制数字:
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
类比:如果二进制像是拼写出单词中的每一个字母,那么十六进制就像是使用速记符号或 Emoji 来代表整个单词。书写起来快多了!
重点总结:我们使用十六进制是因为它对人类来说更易读,而且比起一长串的 0 和 1,出错的机率更低。
4. 进位制间的转换
这是你考试的核心技能!让我们拆解最常见的转换方法。
A. 二进制转十六进制(“四位一组”技巧)
这是最简单的转换方式!
1. 从右边开始,将二进制数每四个分为一组。
2. 计算每一组的数值 (0–15)。
3. 将这些数值转为十六进制数字。
例子:将 \(11010110_{2}\) 转为十六进制。
第 1 组(左):\(1101\) = \(8+4+0+1 = 13\) (即 D)
第 2 组(右):\(0110\) = \(0+4+2+0 = 6\) (即 6)
结果:\(D6_{16}\)
B. 十六进制转二进制
只要将“四位一组”的技巧反过来操作即可!
1. 拿出每一个十六进制数字。
2. 将其转换为 4 位元的二进制数。
3. 将它们拼在一起。
例子:将 \(2A_{16}\) 转为二进制。
\(2\) = \(0010\)
\(A (10)\) = \(1010\)
结果:\(00101010_{2}\)
C. 十进制转二进制(“减法”法)
1. 看看你的二进制位值表 (\(128, 64, 32, 16, 8, 4, 2, 1\))。
2. 找出能放入该数的最大位值。
3. 在该栏位放一个“1”,减去该数值,然后对剩余的部分重复此过程。
例子:将 \(45_{10}\) 转为二进制。
128 能放入吗?不行 (0)。64 能放入吗?不行 (0)。
32 能放入吗?可以 (1)。\(45 - 32 = 13\)。
16 能放入吗?不行 (0)。
8 能放入吗?可以 (1)。\(13 - 8 = 5\)。
4 能放入吗?可以 (1)。\(5 - 4 = 1\)。
2 能放入吗?不行 (0)。
1 能放入吗?可以 (1)。\(1 - 1 = 0\)。
结果:\(00101101_{2}\)
5. 为什么要费心使用十六进制?
你可能会被问到为什么计算机科学要使用十六进制。这里有三个你需要记住的主要原因:
1. 转换容易:在二进制和十六进制之间转换非常简单(使用四位一组法)。
2. 人类可读性高:比起冗长的二进制字符串(例如颜色代码如 \(#FF5733\)),十六进制要短得多,也更容易被人理解。
3. 较少出错:因为它比较短,程序员在输入时出错的机率更低。
需避免的常见错误:当将十进制转为十六进制时,别忘了 10 是 A,而不是“10”。如果你把 \(A6_{16}\) 写成了 \(106_{16}\),那你整个数值就完全改变了!
快速复习框:
- Base 2 (二进制):数字 0, 1。位值为 2 的幂次方。
- Base 10 (十进制):数字 0–9。正常人类计数方式。
- Base 16 (十六进制):数字 0–9, A–F。用作二进制的速记法。
- 1 个十六进制数字 = 4 个位元 (Bits)。这是两者之间“神奇的连接点”。
别担心,刚开始觉得复杂是正常的!就像任何语言一样,只需要一点练习即可。今天就试着把你的年龄转换成二进制吧!