欢迎来到二进制世界!

你好!今天我们将深入探讨二进制数系 (Binary Number System)。这是你 AQA AS Level 计算机科学课程中「数据表示基础 (Fundamentals of data representation)」章节的核心部分。如果一直以来你觉得数学有点可怕,请别担心;二进制其实非常符合逻辑,比我们日常使用的十进制系统简单得多。读完这些笔记后,你就能像电脑一样阅读和计算数字了!

为什么要学这个? 电脑是由数十亿个微小的开关组成的,它们只能处于「开启 (on)」或「关闭 (off)」的状态。因为只有这两种状态,我们使用二进制 (Base 2) 来表示一切——从你最爱的电子游戏到你现在正在阅读的文字,统统都是如此。

1. 无符号二进制 (Unsigned Binary)

无符号二进制 (Unsigned binary) 数字仅用于表示正整数 (Positive integers)。它们无法表示负数。

运作原理:位值 (Place Values)

在我们常见的十进制系统(Base 10)中,我们有个位、十位、百位等等。在二进制中,每一栏位都是 2 的幂次方 (power of 2)

对于一个 8-bit 的数字(一个字节 Byte),其位值如下:
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1

将二进制转换为十进制

要将像 10100100 这样的二进制数转换为十进制,只需将数字为 "1" 的位置所对应的值相加即可:
• (1 x 128) + (0 x 64) + (1 x 32) + (0 x 16) + (0 x 8) + (1 x 4) + (0 x 2) + (0 x 1)
• \( 128 + 32 + 4 = 164 \)

将十进制转换为二进制

「减法法」:
1. 找出能放入该数字中的最大 2 的幂次方。
2. 在该栏位填入 1,并从总数中减去该数值。
3. 对剩余数值重复上述步骤,直到归零为止。

快速复习:最小值与最大值
对于 \( n \) 个位元 (bits):
最小值永远是 0
最大值是 \( 2^n - 1 \)。
例如:8 个位元时,最大值为 \( 2^8 - 1 = 255 \)。

重点总结: 二进制只是一种计算方式,它只有两个数字:0 和 1。「无符号」版本仅用于表示零和正数。

2. 无符号二进制算术

电脑也需要进行运算!你需要掌握如何进行无符号二进制整数的加法和乘法。

二进制加法

加法遵循四个简单规则:
• \( 0 + 0 = 0 \)
• \( 0 + 1 = 1 \)
• \( 1 + 1 = 0 \) (进位 1 到下一栏)
• \( 1 + 1 + 1 = 1 \) (进位 1 到下一栏)

常见错误: 忘记了「进位」。务必将进位清楚地写在下一栏的上方,以免遗漏!

二进制乘法

二进制乘法实际上比十进制乘法更容易,因为你只需要处理 0 或 1。本质上就是「移位并相加」。
例如:\( 101 \times 11 \)
1. 将 101 乘以第一个「1」(从右侧算起):101
2. 将 101 乘以第二个「1」,但向左移一位:1010
3. 将它们相加:\( 101 + 1010 = 1111 \)。

重点总结: 如果你会算 1+1,你就会做二进制算术。只要逐栏处理即可。

3. 有符号二进制 (二补数 Two's Complement)

如果我们需要表示负数该怎么办?我们使用一种称为二补数 (Two's Complement) 的系统。

最高有效位元 (MSB) 的魔法

在二补数中,最左侧的位元 (MSB) 变成负值。对于一个 8-bit 的数字,栏位看起来像这样:
-128 | 64 | 32 | 16 | 8 | 4 | 2 | 1

如何将数字变为负数

如果你有一个正数(例如 5)想将其变为负数 (-5):
1. 写出正数的二进制形式:00000101
2. 反转 (Flip) 所有位元(将 0 变为 1,1 变为 0):11111010
3. 将结果加 111111011
记忆小撇步:「反转并加一 (Flip and Fill)」——反转位元,再补上 1!

二进制减法

在计算机科学中,我们其实不太做「减法」。相反,我们是加上一个负数
要计算 \( 10 - 4 \),你可以计算 \( 10 + (-4) \),其中 -4 使用二补数表示。

有符号二进制的范围

对于 \( n \) 个位元,范围为:
最小值: \( -2^{n-1} \)
最大值: \( 2^{n-1} - 1 \)
例如:8 个位元时,范围是 -128 到 +127。

你知道吗? 使用二补数是因为它允许 CPU 对正数和负数使用相同的加法硬件。这非常高效!

重点总结: 二补数通过将最左侧的栏位设为负值,让我们能够表示负数。

4. 带有分数部分的数字 (定点数 Fixed Point)

有时我们需要表示小数(例如 10.5)。为此,我们使用定点数二进制 (Fixed Point Binary)

二进制小数点

我们想像在一个固定位置有一个「二进制点」(类似于小数点)。小数点右侧的栏位代表分数(二分之一、四分之一、八分之一等)。

以 8-bit 定点数为例,其中 4 个位元代表整数部分,4 个位元代表分数部分:
8 | 4 | 2 | 1 | . | 0.5 | 0.25 | 0.125 | 0.0625

转换范例

要用二进制表示 6.75
1. 整数部分 (6) 为:\( 4 + 2 \),即 0110
2. 分数部分 (0.75) 为:\( 0.5 + 0.25 \),即 1100
3. 结果:0110.1100

如果觉得这有点复杂,不用担心! 只要记住,每向右移动一栏,数值就是除以 2,正如每向左移动一栏,数值就是乘以 2 一样。

重点总结: 定点数二进制使用特定的栏位来表示小于 1 的数值。小数点的位置永远不会移动!

最后快速复习

无符号 (Unsigned): 仅限正数。最大值 = \( 2^n - 1 \)。
二补数 (Two's Complement): 允许表示负数。最左侧位元为负值。
算术: \( 1+1 = 0 \) 进位 1。减法其实就是加上一个负数。
定点数 (Fixed Point): 使用 0.5, 0.25 等栏位来表示分数。

你做得到!二进制是你将在计算机科学中学到的一切基础。请持续练习这些转换,它们很快就会变成你的直觉。