欢迎来到信息表示法 (Information Representation)!

你有没有想过,计算机本质上只是一堆微小的电子开关,它是如何让你观看高画质电影、播放你最爱的歌曲,或是存储你的作业?这一切都要归功于信息表示法。在本章中,我们将探讨计算机如何将现实世界「翻译」成 1 和 0。如果一开始觉得这些概念有点「天外来客」,请不用担心——我们会一步一步为你拆解!


1.1 数据表示法:基础概念

二进制量级:Kilo 与 Kibi 的混淆

在「人类」的世界中,我们使用十进制系统 (Base 10)。当我们说「kilo」时,指的是 1,000。然而,计算机使用二进制系统 (Base 2),所有数值都以 2 的幂次运作。这导致我们在衡量数据时产生了细微的差异。

十进制前缀 (Base 10): 这是你日常生活中使用的单位。

  • 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

二进制前缀 (Base 2): 这些是计算机的「真实」测量单位。

  • 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

记忆小撇步: 如果词汇中间带有「bi」(例如 kibi),它就代表 Binary(二进制),因此它使用的是 1,024 倍数的刻度!


数值系统:二进制、十进制与十六进制

在计算机科学中,我们主要使用三种数值系统:

  1. 十进制 (Denary/Base 10): 我们每天使用的 0-9 数字。
  2. 二进制 (Binary/Base 2): 只有 0 和 1。这是计算机的母语。
  3. 十六进制 (Hexadecimal/Base 16): 使用 0-9 以及 A-F(其中 A=10, B=11, C=12, D=13, E=14, F=15)。

为什么要用十六进制? 它比二进制简短得多,且人类阅读时较不容易出错。一个「十六进制」数字恰好代表 4 个二进制位元(称为一个 nibble)。

快速回顾: 要将二进制转换为十六进制,请从右边开始将二进制数字每 4 个一组分开。例如,\(1011 | 0101\) 会变成 \(B | 5\),即 \(B5_{16}\)。


二进制编码十进制 (BCD)

BCD 是一种特殊的数字表示法,将十进制数字的每一个位单独存储为 4-bit 的二进制码。

例子: 要以 BCD 表示数字 85:
8 = 1000
5 = 0101
因此,85 的 BCD 表示为 1000 0101

现实应用: BCD 常见于数字时钟或计算器,因为这些设备需要个别控制屏幕上的每一个数字。


带符号整数:一补码与二补码

计算机如何辨识一个数是负数?我们使用二补码 (Two's Complement)

步骤:如何使用二补码将数字变为负数:

  1. 先写出该数字的正数二进制形式。
  2. 反转 (Flip) 所有位元(将 0 改为 1,1 改为 0)。这称为「一补码 (One's Complement)」。
  3. 将结果加 1。这就是「二补码」。

常见错误: 别忘了在 8-bit 的带符号数字中,最左边的位元是符号位元 (sign bit)。如果它是 1,该数字就是负数!

二进制加法与溢位: 当你进行二进制加法时,结果有时会大到无法放入规定的位元数(例如将两个 8-bit 的数字相加,却得到 9-bit 的答案)。这称为溢位 (Overflow),它可能会导致计算机运算错误!

重点总结: 二进制是给计算机用的,十六进制是让人更容易阅读二进制,而二补码则是处理负数的方法。


1.2 多媒体:图形与声音

位图 (Bitmapped Graphics)

位图由称为像素 (pixels)(图像元素)的微小点组成。每个像素都被分配了一个二进制颜色代码。

  • 图像分辨率: 图像的宽度像素数乘以高度像素数(例如 1920 x 1080)。
  • 色彩深度 (Color Depth / Bit Depth): 用来表示单一像素颜色的位元数。使用的位元越多,颜色就越丰富(例如 8-bit 色深允许 \(2^8 = 256\) 种颜色)。
  • 文件头 (File Header): 文件中存储有关图像信息的一小部分数据,例如分辨率和色深。

计算文件大小:
\(文件大小 = 分辨率 (宽 \times 高) \times 色深\)
例子: 一张 100x100 且具备 1-bit 色深的图片,文件大小为 10,000 bits。


矢量图 (Vector Graphics)

矢量图不存储像素,而是存储一张绘图列表,包含数学对象(线条、圆形、矩形)及其属性(颜色、粗细、位置)。

比喻: 位图就像照片;如果你放大太多,它会变得「有块状感」(像素化)。矢量图则像是一组绘图指令;即使你把它放大得跟房子一样大,看起来依然完美清晰!


声音

声音本质上是模拟 (analogue) 的(连续波形),但计算机是数字 (digital) 的。为了存储声音,我们必须进行采样 (sampling)

  • 采样: 在固定的时间间隔内,「快照」声音波形的振幅。
  • 采样率 (Sampling Rate): 每秒进行多少次采样(单位为赫兹,Hz)。采样率越高 = 品质越好但文件越大。
  • 采样分辨率 (Sampling Resolution): 用来存储每个采样点的位元数。分辨率越高 = 对声音音量的表示就越精确。

你知道吗? 标准 CD 使用的采样率为每秒 44,100 次!这可是大量的快照。

重点总结: 位图使用像素;矢量图使用数学。声音是通过将模拟波形采样成数字位元来捕捉的。


1.3 压缩 (Compression)

压缩是让文件变小的过程。我们为什么需要它?为了节省存储空间,并让文件在网络上传输得更快。

有损与无损压缩

  1. 有损压缩 (Lossy Compression): 永久删除一些人类眼睛或耳朵不太可能注意到的数据。一旦删除,就无法恢复。(例子:JPEG, MP3)。
  2. 无损压缩 (Lossless Compression): 在不丢失任何原始数据的情况下减小文件大小。当你解压时,它与原始文件完全相同。(例子:PNG, ZIP)。

行程编码 (Run-Length Encoding, RLE)

RLE 是一种简单的无损压缩形式。它寻找连续重复的数据片段,并将其存储为一个单一数值和一个计数。

例子: 想象一排像素:WWWWWBBRRR
使用 RLE,我们将其存储为:5W, 2B, 3R
我们刚刚把 10 个字符变成了 6 个!这对于具有大面积相同颜色的简单图像非常有效。

快速回顾: 当你需要极小的文件且不介意品质轻微下降时(例如流媒体视频),使用有损压缩。当数据必须完美无缺时(例如文本文档或程序代码),使用无损压缩

重点总结: 压缩节省空间。有损压缩丢弃数据;无损压缩通过巧妙的存储方式保留一切完美细节。