欢迎来到主题 2:数据表示!
你有没有想过,电脑是如何分辨高清电影、文字信息和电子游戏的呢?其实,电脑的核心只是一堆微小的开关,状态非 ON 即 OFF。在本章中,我们将学习电脑如何利用这些简单的开关(二进制)来表示数字世界中的一切。如果刚开始觉得涉及很多数学运算,别担心——一旦你掌握了其中的规律,这就像学会了一种秘密代码一样!
2.1 二进制的威力
什么是二进制?
电脑使用二进制 (binary),因为它们由类似开关的晶体管组成。我们将“OFF”表示为 0,将“ON”表示为 1。这些单个的 0 和 1 被称为位 (bits)(是 Binary Digits 的缩写)。
你知道吗? 一个位是电脑能存储的最小数据单位。它就像你家里的一个电灯开关!
状态数量
如果你有特定数量的位,你能表示多少种不同的事物呢?有一个简单的公式:\( 2^n \),其中 \( n \) 是位的数量。
例如: 如果你有 3 个位,你可以表示 \( 2^3 = 8 \) 种不同的状态(000、001、010、011、100、101、110、111)。
无符号整数与有符号整数
电脑需要存储正数和负数:
1. 无符号整数 (Unsigned Integers): 仅包含正数(0 及以上)。
2. 补码 (Two’s Complement)(有符号整数): 这是一种同时表示正数和负数的方法。最高有效位 (most significant bit)(最左边的那一位)代表负值。
快速复习: 在 8 位的补码中,最左边的位代表 \( -128 \) 而不是 \( +128 \)。这让我们可以在 8 位内存储从 \( -128 \) 到 \( +127 \) 的数字。
二进制加法
二进制加法与普通加法一样,但当数值达到 2 时就需要进位!
- \( 0 + 0 = 0 \)
- \( 0 + 1 = 1 \)
- \( 1 + 1 = 0 \)(进位 1)
- \( 1 + 1 + 1 = 1 \)(进位 1)
常见错误: 忽略了溢出 (Overflow)。如果你将两个 8 位的数字相加,而结果需要 9 位才能表示,电脑可能会忽略多出来的那一位。这就是溢出错误 (overflow error),可能会导致程序崩溃或给出错误答案!
位移
将位向左或向右移位是一种快速乘法或除法的方法。
- 逻辑左移 (Logical Shift Left): 将位向左移动,右边补 0。移动 1 位相当于将数字乘以 2。
- 逻辑右移 (Logical Shift Right): 将位向右移动。移动 1 位相当于将数字除以 2(舍弃任何余数)。
- 算术移位 (Arithmetic Shift): 用于有符号数,以保持符号位不变。
十六进制 (Hexadecimal / Hex)
十六进制是一种基数为 16 的系统。它使用 0-9 以及 A、B、C、D、E、F 来代表 10-15 的值。
为什么要用它? 与长串的二进制相比,人类阅读和记忆十六进制要容易得多。一个十六进制数字正好代表 4 个位(一个半字节 nibble)。
重点提示: 二进制是给电脑看的;十六进制则是人类为了更容易理解二进制而使用的“速记法”。
2.2 表示文字、图像和声音
文字:ASCII
为了存储文字,电脑会给每个字符分配一个唯一的数字。7 位 ASCII 是一种标准代码,可以表示 128 种不同的字符(包括大写字母、小写字母、数字和符号)。
例如: 在 ASCII 中,字母 'A' 由十进制数字 65 表示。
图像:位图 (Bitmaps)
数字图像由称为像素 (pixels)(图像元素)的微小点组成。
- 分辨率 (Resolution): 图像中的像素数量(例如,宽度 x 高度)。
- 色彩深度 (Colour Depth): 每个像素所使用的位数。每个像素的位数越多,颜色就越丰富!
公式: \( \text{总颜色数} = 2^{\text{色彩深度}} \)
声音:模拟转数字
声音本质上是模拟 (analogue) 波。为了存储声音,电脑会定期对声波进行“快照”。这称为采样 (sampling)。
- 采样率 (Sample Rate): 每秒进行采样的次数(以赫兹 Hz 为单位)。
- 位深度 (Bit Depth): 用于记录每次采样时声波振幅 (amplitude)(高度)的位数。
- 采样间隔 (Sample Interval): 每次采样之间的时间间隙。
类比: 想象一张山的数码照片。“分辨率”就像相机的像素,而声音的“采样率”就像视频的每秒帧数 (FPS)。数值越高通常质量越好,但产生的文件也越大!
重点提示: 将现实世界的数据(图像/声音)转换为二进制,总是在质量和文件大小之间进行权衡。
2.3 数据存储与压缩
测量数据
你需要了解这些单位!在计算机科学中,我们使用二进制倍数(基于 1024):
- 位 (Bit): 1 或 0
- 半字节 (Nibble): 4 个位
- 字节 (Byte): 8 个位
- 千位字节 (Kibibyte, KiB): 1024 个字节
- 兆位字节 (Mebibyte, MiB): 1024 KiB
- 吉位字节 (Gibibyte, GiB): 1024 MiB
- 太位字节 (Tebibyte, TiB): 1024 GiB
记忆口诀: Killy Might Get Tired (Kibi, Mebi, Gibi, Tebi)。
数据压缩
压缩可以缩小文件,从而占用更少的存储空间,并在互联网上传输得更快。
1. 有损压缩 (Lossy Compression)
这会永久删除部分数据以缩小文件大小。你会损失一些质量,但通常人类无法察觉(例如 JPEG 图像或 MP3 歌曲)。
警告: 一旦数据被删除,就无法还原原始数据了!
2. 无损压缩 (Lossless Compression)
这可以在不丢失任何信息的情况下缩小文件。它通过寻找数据中的规律来进行更高效的存储。
例如: 如果一个文件中在 100 个连续的 "A",与其写成 "AAAA...",不如写成 "100xA"。这对于文本文件或程序代码非常有用,因为每一个字符都很重要。
重点提示: 多媒体(照片/音乐)使用有损压缩以节省大量空间。对于文件和代码,请使用无损压缩,因为你不能承受丢失任何一个位!
最终快速复习
二进制: 基数为 2 (0, 1)。
十六进制: 基数为 16 (0-F)。
字符集: 字符及其对应的二进制代码列表 (ASCII)。
位图: 由像素组成的图像。
采样: 将模拟声音转换为数字信号。
压缩: 缩小文件大小(有损 = 数据丢失,无损 = 无数据丢失)。
如果刚开始觉得有点复杂,别担心!多练习将小数字在二进制和十进制之间转换,其余的内容很快就会融会贯通。你一定做得到!