欢迎来到数据表示法 (Data Representation)!
你有没有想过,计算机是怎么分辨自拍照片、音乐文件和文字信息的呢?计算机的核心其实是一组极小的开关,它们不是处于 关 (OFF) 就是 开 (ON)。我们用 0 和 1 来表示这些状态,这就是所谓的 二进制 (Binary)。
在本章中,我们将学习计算机如何仅用这两个数字来“沟通”,从简单的整数到复杂的字符都能表示。如果一开始觉得有很多数学运算,别担心——我们会一步步为你拆解!
1. 二进制量级与字首 (Binary Magnitudes and Prefixes)
在日常生活中,我们使用 十进制字首(以 10 为底)。例如,1 公里等于 1,000 公尺。然而,计算机是以 二进制(以 2 为底)运作的,因此它们使用 二进制字首。
十进制字首 (以 10 为底)
这是你在科学课上常用的单位,它们以 10 的幂次(\(10^3\))递增。
- kilo (k): \(10^3 = 1,000\)
- mega (M): \(10^6 = 1,000,000\)
- giga (G): \(10^9 = 1,000,000,000\)
- tera (T): \(10^{12} = 1,000,000,000,000\)
二进制字首 (以 2 为底)
这对计算机来说更精确,因为它们以 2 的幂次(\(2^{10}\))递增。
- kibi (Ki): \(2^{10} = 1,024\)
- mebi (Mi): \(2^{20} = 1,048,576\)
- gibi (Gi): \(2^{30} = 1,073,741,824\)
- tebi (Ti): \(2^{40} = 1,099,511,627,776\)
快速小复习: 如果你买了一个“1 Terabyte”的硬盘,你实际上得到的是 \(10^{12}\) 字节。但计算机可能会显示稍微少一点的容量,因为它采用的是“Tebibytes”(\(2^{40}\)) 的计算方式。
重点总结: 十进制字首是以 1,000 为基准;二进制字首则是以 1,024 为基准。
2. 数字系统 (Number Systems)
我们需要学会如何在三种主要系统之间进行转换:十进制 (Denary)(我们常用的数字)、二进制 (Binary)(计算机的数字),以及 十六进制 (Hexadecimal)(二进制的简写)。
十进制 (Base 10)
使用 0-9 的数字。位值(place values)分别为个位、十位、百位等。
二进制 (Base 2)
仅使用 0 和 1。位值分别为 128, 64, 32, 16, 8, 4, 2, 1。
示例:二进制的 1010 等于 (1 × 8) + (0 × 4) + (1 × 2) + (0 × 1) = 十进制的 10。
十六进制 (Base 16)
使用 0-9 的数字以及 A-F 的字母。
A = 10, B = 11, C = 12, D = 13, E = 14, F = 15。
使用十六进制是因为它比二进制短得多,且人类阅读时较不易出错。
十六进制的实际应用: 你会在 HTML 颜色代码(例如 #FFFFFF 代表白色)和网络设备的 MAC 地址 中看到十六进制的身影。
二进制编码十进制 (BCD)
BCD 是一种表示十进制数字的特殊方式。每个十进制位数都会转换成自己的 4 位二进制半字节 (nibble)。
示例:将 12 转换为 BCD:
1 = 0001
2 = 0010
所以,12 的 BCD 表示法为 0001 0010。
BCD 的实际应用: 用于数字时钟和计算器,这些设备需要将各个位数显示在屏幕上。
重点总结: 二进制是给计算机看的,十六进制是方便人类阅读二进制,而 BCD 则用于显示单个位数。
3. 有符号整数(负数) (Signed Integers)
我们要如何告诉计算机一个数字是负数呢?我们主要使用两种方法:一补数 (One's Complement) 和 二补数 (Two's Complement)。
一补数 (One's Complement)
要取得一个二进制数字的一补数,只需 翻转所有位元(将 0 变为 1,1 变为 0)。
二补数 (Two's Complement)(行业标准)
这是表示负数最常见的方式。
第一步: 从该数字的正二进制版本开始。
第二步: 翻转所有位元(一补数)。
第三步: 将结果加 1。
记忆口诀: “翻转后加一!”
你知道吗? 在二补数中,最左边的位元(最高有效位元,Most Significant Bit)具有负值。在一个 8 位的数字中,位值分别为:-128, 64, 32, 16, 8, 4, 2, 1。
重点总结: 使用二补数是因为它允许计算机使用与加法相同的硬件来执行减法。
4. 二进制算术与溢出 (Binary Arithmetic and Overflow)
二进制加法就像十进制加法一样,只是你需要更早进行“进位”!
二进制加法规则:
- \(0 + 0 = 0\)
- \(0 + 1 = 1\)
- \(1 + 1 = 0\)(进位 1)
- \(1 + 1 + 1 = 1\)(进位 1)
什么是溢出 (Overflow)?
想象你有一个 8 位的寄存器(一个可以容纳 8 个位元的“存储盒”)。如果你将两个数字相加,而结果需要 9 个位元,那么多出来的那个位元就无处可去。这就称为 溢出 (Overflow)。
比喻: 这就像汽车的里程表跑到 999,999 英里后又归零变成 000,000 一样。计算机可能会给出完全错误的答案,因为它“丢失”了那个溢出位元。
重点总结: 当运算结果过大,无法装入分配的位元数时,就会发生溢出。
5. 字符表示法 (Representing Characters)
计算机不知道字母“A”是什么,它们只认识数字。字符集 (Character Set) 是一张对照表,告诉计算机哪个数字代表哪个字符。
ASCII (美国信息交换标准代码)
- 标准 ASCII: 使用 7 个位元,可表示 128 个字符(英文大小写字母、数字和基本符号)。
- 扩展 ASCII: 使用 8 个位元,可表示 256 个字符(包含特殊符号和一些带有重音的字符)。
Unicode
ASCII 很棒,但它无法表示中文、阿拉伯文甚至表情符号!因此创造了 Unicode 来解决这个问题。
- 它使用更多的位元数(通常是 16 或 32 位元)。
- 它可以表示世界上每一种语言。
- Unicode 的前 128 个编码与 ASCII 完全相同,以保持兼容性。
常见误区: 学生常以为 ASCII 和 Unicode 是“文件”本身。其实不是!它们只是用来将位元转换为字母的 编码系统。
重点总结: ASCII 体积小且仅限于英文;Unicode 则非常庞大,包含了所有你能想象到的字符和表情符号。
最终快速复习框
1. 二进制字首: kibi, mebi, gibi, tebi(1,024 的倍数)。
2. 十六进制: 16 进制 (0-9, A-F)。用于颜色代码和 MAC 地址。
3. BCD: 每个数字占 4 个位元(例如 5 = 0101)。用于数字显示器。
4. 二补数: 翻转位元并加 1。用于表示负数。
5. 溢出: 当结果对于 CPU 寄存器来说太大时发生。
6. Unicode: 全球字符标准,取代了受限的 ASCII。
你已经完成了数据表示法的笔记!如果转换运算需要练习几次才能掌握,请别担心——熟能生巧。你做得很好!