欢迎来到二进制的世界!
你有没有想过,电脑基本上只是一堆开关和电线的集合,它是如何让你观看高画质电影或运行复杂的电子游戏的呢?这一切都要归功于二进制 (Binary)。在本章中,我们将一起探索电脑的“语言”。如果现在看见一堆 1 和 0 让你感到困惑,请别担心——看完这份笔记,你将会像电脑一样快速地阅读和运算!
1. 基础概念:进位制 (Number Bases)
在深入了解二进制之前,我们先看看我们平时是如何数数的。我们使用十进制 (Base 10),这很可能是因为我们有十根手指头!而电脑使用二进制 (Base 2),是因为它们是由晶体管组成的,晶体管只有开启 (On, 1) 或关闭 (Off, 0) 两种状态。
关键进位制
- 十进制 (Base 10): 使用 0-9 的数字。
- 二进制 (Base 2): 只使用 0 和 1。
- 十六进制 (Base 16): 使用 0-9 和 A-F。这是人类用来作为二进制的“速记法”,因为它读起来容易多了。例如,二进制的 10101110 在十六进制中仅为 AE!
你知道吗? 单个二进制数字(一个 0 或 1)被称为一个位 (bit)。如果你将 8 个位组合在一起,就得到一个字节 (byte)!
快速复习:2 的次方
要掌握二进制,你必须熟记这些数字:
\( 2^0=1 \), \( 2^1=2 \), \( 2^2=4 \), \( 2^3=8 \), \( 2^4=16 \), \( 2^5=32 \), \( 2^6=64 \), \( 2^7=128 \)。
总结:
重点摘要: 进位制只是表示相同数值的不同方式。二进制是给电脑用的,十进制是给人类用的,而十六进制则是两者之间的桥梁。
2. 无符号二进制 (Unsigned Binary)
无符号二进制仅用于表示正整数,这里没有办法表示负号。
数值范围
如果你有 \( n \) 个位,你可以表示 \( 2^n \) 个不同的数值。
最小值永远是 0。
最大值是 \( 2^n - 1 \)。
示例: 使用 8 个位(一个字节),你可以表示从 0 到 255 的数字 (\( 2^8 - 1 \))。
二进制算术
加法
这就像我们平时做的竖式加法一样!只需要记住这四条规则:
1. \( 0 + 0 = 0 \)
2. \( 0 + 1 = 1 \)
3. \( 1 + 1 = 0 \)(并向下一位进 1)
4. \( 1 + 1 + 1 = 1 \)(并向下一位进 1)
乘法
要计算无符号二进制乘法,我们使用“位移与相加 (shift and add)”的方法,这与学校学的长乘法类似。如果你将数字乘以 2,只需将所有位向左移动一位,并在末尾补一个 0 即可!
常见错误: 在加法时忘记了“进位”。一定要清楚地把进位写在下一栏的上方,这样才不会漏掉它们!
总结:
重点摘要: 无符号二进制用于表示正数。你拥有的位数越多,能存储的数字就越大。
3. 有符号二进制:补码 (Two's Complement)
我们如何告诉电脑一个数字是负数呢?我们使用一种称为补码 (Two's Complement) 的系统。
概念
在 8 位的补码中,最高有效位 (Most Significant Bit,最左边的那一位) 具有负权重。它不代表 128,而是代表 -128。
“取反加一”技巧
要将一个正数转换为负数(例如,将 \( 5 \) 转为 \( -5 \)):
1. 写出该正数的二进制形式(例如:00000101)。
2. 取反 (Flip) 所有位(0 变 1,1 变 0)-> 11111010。
3. 将结果加 1 -> 11111011。这就是 \( -5 \)!
减法
电脑实际上并不会进行“减法”——它们只是在加上负数!要计算 \( 10 - 5 \),电脑会利用补码计算 \( 10 + (-5) \)。
总结:
重点摘要: 补码让我们能同时表示正数和负数。如果最左边的位是 1,该数字就是负数!
4. 分数 (Fractional Numbers)
生活不仅仅是整数。有时我们需要小数(例如 10.5)。电脑使用两种主要方法:定点数 (Fixed Point) 和 浮点数 (Floating Point)。
定点数
我们想象二进制小数点位于一个固定的位置。例如,在一个 8 位的数字中,我们可以规定前 4 位是整数,后 4 位是分数 (\( 1/2, 1/4, 1/8, 1/16 \))。
优点: 电脑处理速度快。
缺点: 范围有限;无法同时表示非常大和非常小的数字。
浮点数
这类似于“科学计数法”(例如,\( 6.02 \times 10^{23} \))。它由两部分组成:
1. 尾数 (Mantissa): 数字的实际有效数字。
2. 指数 (Exponent): 告诉我们二进制小数点移动的位置。
正指数会将小数点向右移动(使数字变大)。
负指数会将小数点向左移动(使数字变小)。
总结:
重点摘要: 定点数简单但僵化。浮点数复杂,但允许表示范围极大或极小的数字。
5. 标准化与误差
在考试中,你经常会被要求将一个浮点数标准化 (normalise)。这意味着调整尾数和指数,使数字达到最高的精确度。
如何辨识标准化数字:
- 正数的标准化数字总是以 01 开头。
- 负数的标准化数字总是以 10 开头。
舍入误差 (Rounding Errors)
别担心,如果这看起来很棘手: 某些十进制数字(例如 \( 0.1 \))无论你使用多少个位,都永远无法在二进制中完美表示。这就像试图将 \( 1/3 \) 写成十进制小数 (\( 0.3333... \)) 一样——它会无限循环下去!这会导致微小的舍入误差。
绝对误差与相对误差
- 绝对误差 (Absolute Error): 真实数字与我们二进制版本之间的实际差值。
- 相对误差 (Relative Error): 绝对误差除以真实数字(通常以百分比表示)。
上溢与下溢
- 上溢 (Overflow): 当数字太大而无法装入指定的位数中时(就像试图将一加仑的水装进一品脱的杯子里)。
- 下溢 (Underflow): 当数字太小而无法表示时(就像试图用米尺来测量一个原子的长度)。
总结:
重点摘要: 标准化能确保最大的精确度。然而,二进制总是有其限制,导致误差、上溢或下溢的发生。
6. 信息单位
最后,我们需要了解如何衡量数据。你可能认为 1 Kilobyte 是 1000 bytes,但在计算机科学中,它更具体一些!
二进制前缀 (2 的次方)
这些是电脑实际使用的单位:
- Kibi (Ki): \( 2^{10} \) (1,024 bytes)
- Mebi (Mi): \( 2^{20} \)
- Gibi (Gi): \( 2^{30} \)
- Tebi (Ti): \( 2^{40} \)
十进制前缀 (10 的次方)
这些是人类通常使用的(硬盘制造商也常使用这些来让他们的硬盘容量看起来更大!):
- Kilo (k): \( 10^3 \) (1,000 bytes)
- Mega (M): \( 10^6 \)
- Giga (G): \( 10^9 \)
- Tera (T): \( 10^{12} \)
记忆小撇步: 如果名字里有个 "i"(例如 Kibi),那就是基于 1024 的“聪明”电脑版本!
总结:
重点摘要: 考试时务必看清楚题目问的是十进制 (1000 进位) 还是二进制 (1024 进位) 前缀。这对你的最终答案会有很大的影响!