欢迎来到数据表示法 (Data Representation)!

你有没有想过,计算机是怎么分辨自拍照片、音乐文件和文字信息的呢?计算机的核心其实是一组极小的开关,它们不是处于 关 (OFF) 就是 开 (ON)。我们用 01 来表示这些状态,这就是所谓的 二进制 (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。

你已经完成了数据表示法的笔记!如果转换运算需要练习几次才能掌握,请别担心——熟能生巧。你做得很好!