学习笔记:信息表示 (AS Level 9618)

各位未来的计算机科学家,你们好!欢迎来到计算机工作原理的基础领域。本章——信息表示至关重要,因为你所看到的一切——文本、图像、声音、程序——都必须先转换为二进制数据(0 和 1 的序列),计算机才能理解它们。

别担心,即使数字不是你的强项也没关系。我们将通过大量的现实案例,把复杂的转换和概念拆解成简单、易懂的步骤!让我们开始探索计算机的语言吧。

1.1 数据表示

二进制量级:Kibi 与 Kilo

在计算机科学中,我们需要处理海量数据,因此会使用 Kilobyte、Megabyte 和 Gigabyte 等词头。然而,这些词头有两种不同的标准:十进制 (SI)二进制 (IEC)

十进制词头 (Kilo, Mega, Giga, Tera)
  • 基于 10 的幂。
  • Kilo (k): \(10^3 = 1000\)
  • Mega (M): \(10^6 = 1,000,000\)
  • Giga (G): \(10^9 = 1,000,000,000\)
  • Tera (T): \(10^{12} = 1,000,000,000,000\)
  • 例如:1公里等于1000米。
二进制词头 (Kibi, Mebi, Gibi, Tebi)
  • 计算机更偏好 2 的幂(因为它们使用二进制)。这些词头用于描述计算机内存和存储容量,尽管 SI 词头经常被误用。
  • Kibi (Ki): \(2^{10} = 1024\) (Kibibyte)
  • Mebi (Mi): \(2^{20} = 1,048,576\) (Mebibyte)
  • Gibi (Gi): \(2^{30}\) (Gibibyte)
  • Tebi (Ti): \(2^{40}\) (Tebibyte)

关键区别: 当你在市场营销中看到“kilo”或“mega”(如硬盘容量)时,通常指十进制系统(10 的幂)。但在编程中计算内存地址或实际文件大小时,二进制系统(2 的幂,即 1024)才是正确的标准。

快速回顾:

永远记住区别:kilo 是 1000,kibi 是 1024。“i”代表“二进制 (binary)”。

数制与转换

计算机依赖于不同的数制基数。你必须掌握整数在这些基数之间的转换。

十进制 (Denary, Base 10)

我们日常使用的数字系统,使用 0–9 这 10 个数字。

二进制 (Binary, Base 2)

计算机的母语,只使用 0 和 1 两个数字。每一位数字被称为一个比特 (bit)

十六进制 (Hexadecimal, Base 16)

使用 16 个字符(0–9 和 A–F)。它是二进制的缩写形式,因为 4 个比特刚好可以转换为 1 个十六进制位,这使得冗长的二进制字符串更易于人类阅读和调试。

分步转换:十进制转二进制(及十六进制)

将十进制数 156 转换为 8 位二进制,再转为十六进制。

第一步:设置权重(2 的幂):
\(128 \quad 64 \quad 32 \quad 16 \quad 8 \quad 4 \quad 2 \quad 1\)

第二步:找到能容纳 156 的最大权重:
\(156 - 128 = 28\)。因此,128 位为 ON (1)。

第三步:用余数 (28) 继续计算:
64(太大,为 0)。32(太大,为 0)。16(能容纳:\(28 - 16 = 12\))。因此,16 位为 ON (1)。

第四步:用余数 (12) 继续计算:
8(能容纳:\(12 - 8 = 4\))。因此,8 位为 ON (1)。
4(能容纳:\(4 - 4 = 0\))。因此,4 位为 ON (1)。
2 (0)。1 (0)。

结果(二进制): \(1 \quad 0 \quad 0 \quad 1 \quad 1 \quad 1 \quad 0 \quad 0\)

第五步:将二进制转为十六进制:
将 8 位二进制分为两个半字节(每个 4 位):
第一组:1001(权重:8+1 = 9)
第二组:1100(权重:8+4 = 12,在十六进制中为 C)

结果(十六进制): 9C

你知道吗?十六进制通常在数字前加井号 (#) 或“&”符号,如 #9C 或 &9C,有时在编程中写作 0x9C。

二进制编码的十进制 (BCD)

BCD 是用二进制表示十进制数字的另一种方式,主要用于显示器和简单的算术电路。在 BCD 中,每个十进制数字都用其对应的 4 位二进制代码表示

例如:十进制 156 的 BCD 表示:
1 变为 0001
5 变为 0101
6 变为 0110

结果(BCD): 0001 0101 0110(共 12 位)。

BCD 在空间利用上效率较低(156 在纯二进制中仅需 8 位),但在数字时钟或计算器等硬件直接驱动显示的应用中非常有用。

表示负整数:补码 (Two's Complement)

计算机如何存储负号?它使用补码系统。该系统允许我们一致地表示正负整数,并使二进制减法变得更简单(直接变为加法!)。

最左边的一位(最高有效位,MSB)用作符号位

  • 如果 MSB 是 0,则该数为正数
  • 如果 MSB 是 1,则该数为负数
分步转换:正十进制转负数补码

将 -45 转换为 8 位补码:

  1. 找到正数的二进制形式:
    +45 的 8 位二进制是 0010 1101。
  2. 执行反码(按位取反):
    将所有的 0 变为 1,1 变为 0。
    0010 1101 变为 1101 0010。
  3. 执行补码(加 1):
    \(1101\ 0010 + 1 = 1101\ 0011\)

结果: -45 的 8 位补码为 1101 0011。注意 MSB 为 1,表示这是一个负数。

二进制加减法

二进制加法遵循简单的规则:

  • \(0 + 0 = 0\) (进位 0)
  • \(0 + 1 = 1\) (进位 0)
  • \(1 + 1 = 0\) (进位 1)
  • \(1 + 1 + 1 = 1\) (进位 1)

二进制减法: 计算机通过补码执行减法。计算 A - B 时,计算机简单地计算 A + (-B),其中 -B 是用补码表示的。

理解溢出 (Overflow)

当算术计算的结果过大(或过小),超过了分配的位数(如 8 位)所能表示的范围时,就会发生溢出

示例: 如果使用 8 位补码,最大正数值为 +127 (0111 1111)。如果给 127 加 1,结果 (128) 会导致 MSB 变为 1 (1000 0000)。由于 MSB 现在是 1,计算机将其解释为负数(补码中的 -128),从而导致溢出错误。

字符集 (ASCII 和 Unicode)

文本字符(A, b, !, 5)也必须存储为二进制。字符集是一种标准化映射系统,为每个字符分配唯一的二进制代码。

  • ASCII(美国标准信息交换码): 最初的标准。使用 7 位,允许 128 个不同的字符(0 到 127)。涵盖了英语大小写字母、数字和基本符号。
  • 扩展 ASCII: 使用 8 位,允许 256 个字符(0 到 255)。包含了更多的区域性字符和图形符号。
  • Unicode: 现代标准。使用 16、24 或 32 位,允许数百万个唯一字符。这对于全球范围内的文本呈现至关重要,涵盖了所有语言、表情符号和数学符号。

关键要点 (1.1): 数据本身就是原始二进制。我们使用十六进制来提高人类的工作效率,使用补码来处理带符号整数,使用特定的字符集(如 Unicode)将原始位映射为有意义的符号。

1.2 多媒体表示

多媒体数据(图片和声音)比较复杂,必须从其模拟(连续)的现实形式转换为数字(离散二进制)数据。

图形:位图 (Bitmapped Images)

位图图像(如 JPEG 或 PNG)是一个由单个彩色点(称为像素)组成的网格。

编码位图
  1. 像素数据: 每个像素被分配一个代表其颜色的二进制代码。
  2. 色深 (Colour Depth/Bit Depth): 用于表示单个像素颜色的位数。色深越高,可表示的颜色就越多。
    颜色总数 = \(2^{\text{色深}}\)
    (例如:8 位 = 256 色;24 位 = 1670 万色。)
  3. 图像分辨率: 图像中的像素数量(宽 x 高)。
  4. 文件头 (File Header): 包含关于图像结构的重要信息(如文件类型、分辨率、色深)。
计算位图文件大小

文件大小取决于像素总数和每个像素使用的色深。

公式(单位:位):
$$ \text{文件大小} = \text{图像宽度 (像素)} \times \text{图像高度 (像素)} \times \text{色深 (位)} $$

若要得到字节数,将结果除以 8。

改变要素的影响
  • 增加分辨率: 存储更多像素,图像质量更高,但文件大小按比例增大。
  • 增加色深: 每个像素使用更多位数,颜色范围更广(质量更高),但文件大小按比例增大。

图形:矢量图 (Vector Graphics)

与位图不同,矢量图(如 SVG)不存储像素数据。相反,它们存储有关如何绘制图像的数学指令(绘图列表)。

  • 绘图对象: 基本几何形状(如圆、线、矩形)。
  • 属性: 对象的特征(如线条粗细、颜色、位置、填充图案)。
论证:位图 vs. 矢量图
特性 位图 (如照片) 矢量图 (如标志)
缩放 质量下降(出现像素化)。 完美缩放(重新计算数学参数)。
文件大小 取决于分辨率和色深。复杂照片文件较大。 通常较小,取决于对象的复杂程度。
现实用途 照片、具有细腻阴影的复杂图像。 标志、字体、技术图纸、简单图形。

论证技巧: 如果图像需要频繁缩放而不损失质量(例如公司标志在广告牌与信纸上的应用),请使用矢量图。

声音表示

声音本质上是模拟波。要以数字形式存储,必须通过称为采样 (sampling) 的过程进行转换。

采样过程
  1. 模数转换器 (ADC): 将连续的模拟声波转换为数字形式。
  2. 采样: 定期测量声波的振幅(响度)。
  3. 采样率 (Sampling Rate/Frequency): 每秒采集的样本数量(单位:赫兹,Hz)。采样率越高,测量越频繁,捕捉到的声波越精确。
  4. 采样分辨率 (Sampling Resolution/Bit Depth): 用于存储每个采样振幅值的位数。分辨率越高,响度级别范围越细腻,准确度越高。

类比:想象声音录制就像制作定格动画。采样率是你每秒拍摄的照片张数,而采样分辨率是每张照片的精细度(色彩深度)。

对文件大小和准确度的影响

如果提高采样率采样分辨率,音质(准确度)会显著提高,但存储声音所需的总位数也会增加,从而导致文件体积变大。

关键要点 (1.2): 位图是像素网格;矢量图是数学指令。音质取决于采样的频率(率)和细节(分辨率)。

1.3 压缩

数据压缩至关重要,因为现代文件(尤其是多媒体文件)非常巨大。压缩能减小文件大小,从而节省存储空间并缩短网络传输时间。

有损 vs. 无损压缩

压缩主要分为这两类,了解它们的区别对于论证使用场景至关重要。

1. 无损压缩 (Lossless Compression)
  • 定义: 从压缩文件中可以完全无误地还原原始数据。没有任何信息永久丢失。
  • 用途: 用于那些每一个比特都至关重要的数据,如文本文档、可执行程序和医疗图像。
  • 示例: ZIP, PNG, GIF, 行程编码 (RLE)。
  • 缺点: 压缩比通常较低(文件相对较大)。
2. 有损压缩 (Lossy Compression)
  • 定义: 在压缩过程中,不可逆的数据被永久丢弃。这些数据通常是人眼或人耳最不容易察觉的信息。
  • 用途: 用于多媒体,以牺牲一小部分质量换取大幅度减小文件大小。
  • 示例: JPEG (图像), MP3 (音频), MPEG (视频)。
  • 缺点: 永久性的质量损失。

论证示例: 如果你在发送科学数据文件,必须使用无损压缩以保持数据完整性。如果你在上传照片到社交媒体,使用有损压缩 (JPEG) 是完全可以接受的,因为文件大小比细节更重要。

压缩方法:行程编码 (RLE)

RLE 是一种简单且常见的无损压缩方式,对于包含长序列相同值的数据(即数据冗余)特别有效。它通过存储数值及其连续重复的次数(即“行程”)来工作。

RLE 如何工作(文本示例)

想象一行文本或一个简单的黑白位图图像行:
原始数据: WWWWWWWBBBWWRRRR

RLE 编码: 我们将其编码为 (计数, 数值):
\((7, W), (3, B), (2, W), (4, R)\)

不同文件类型的应用:

  • 文本文件: 如果有长字符重复(例如许多空格或制表符),非常有效。
  • 位图图像: 对于具有大面积纯色块的简单图像非常有效。
  • 矢量图: 相关性较低,因为矢量图本质上由数学指令而非顺序像素数据定义。
  • 声音文件: 如果存在静音周期(零振幅样本的长运行),也可以使用。
快速回顾 (1.3):

无损: 质量完美,文件较大 (ZIP)。用于关键数据。
有损: 质量降低,文件非常小 (JPEG, MP3)。用于非关键多媒体。
RLE: (行程编码) 一种通过统计连续重复值来编码的无损方法。