真实世界的信息是连续的(无限细腻),电脑只能存有限的 0 和 1。 数字化的本质就是三个动作:采样(切碎)→ 量化(定档位)→ 编码(写成 0/1)。 四种信息(文字/图片/声音/视频)走的是同一条路,差别只在"怎么切"。 [!tip] 承接上一篇 上一篇 [[01 二进制原理入门]] 讲了 0 和 1 怎么算; 这一篇讲 真实世界的东西怎么变成 0 和 1。
0. 先建立一个总观念:模拟 vs 数字
| 模拟信号(Analog) | 数字信号(Digital) | |
|---|---|---|
| 取值 | 连续,任意精度 | 离散,只有固定档位 |
| 例子 | 黑胶唱片、磁带、老式钟表指针 | CD、U盘、手机照片 |
| 抗干扰 | 差,录一次损一次 | 强,复制一万次也一样 |
| 能压缩 | 难 | 容易 |
真实世界是连续的,电脑只能存有限个状态。 所以数字化一定会"丢东西"。所谓无损压缩,不是没丢,而是丢的那些能完美还原回来。 [!example] 磁带为什么越录越差? 磁带存的是连续的磁场强度。你把磁带复制一份,磁场没法完全一致 → 有误差; 再复制一次,误差又叠加一次。十次之后全是沙沙声。 CD 存的是 0 和 1。只要还能分清"高"和"低",拷一万次都是一个字不差。 这就是数字化的最大红利:可完美复制。
1. 文字:查表换编号
文字数字化最简单,因为它天生就是离散的(汉字就那么多,字母就那么多),不用采样。
做法:给每个字符发一个编号,编号写成二进制。
ASCII:英文字符的老表格(7 位 / 8 位)
| 字符 | 十进制 | 二进制 | 十六进制 |
|---|---|---|---|
| 空格 | 32 | 00100000 |
20 |
0 |
48 | 00110000 |
30 |
A |
65 | 01000001 |
41 |
Z |
90 | 01011010 |
5A |
a |
97 | 01100001 |
61 |
z |
122 | 01111010 |
7A |
A= 65,往后顺着数就是 B、C、D……- 大写 (
A=65) 和小写 (a=97) 差 32 - 所以
A和a的第 6 位不同:01000001vs01100001
中文怎么办?编码表的一次次扩容
ASCII 只有 128 个位置,塞不下几万个汉字。于是有了中文编码:
| 编码 | 覆盖范围 | 一个汉字占几个字节 |
|---|---|---|
| ASCII | 英文、数字、符号(128 个) | 1 个字符 = 1 字节 |
| GBK / GB2312 | 简体中文 + 英文 | 2 字节 |
| UTF-8 | 全世界所有文字 | 中文通常 3 字节,英文 1 字节 |
| UTF-16 | 全世界所有文字 | 中文 2 字节(但英文也变 2 字节) |
乱码不是文件坏了,是存的表和读的表不是同一张。
比如文件按 GBK 存("中" = 10110110 11010000),却用 UTF-8 去读,
UTF-8 会把这些字节当成"某个字符的第几部分",拼出来就是一串问号方块。
记住:乱码先查编码设置,别急着重做文件。
UTF-8 为什么是"可变长度"?
| 首字节的样子 | 这个字符总共占几个字节 | 用来装什么 |
|---|---|---|
0xxxxxxx |
1 字节 | 英文、数字(兼容 ASCII) |
110xxxxx |
2 字节 | 西欧字母、希腊文…… |
1110xxxx |
3 字节 | 中文汉字 |
11110xxx |
4 字节 | emoji、生僻字 𠮷 |
看第一个字节的开头有几个连续的 1,就知道这个字符总共占几个字节。 这样电脑从头往后扫,永远不会读串位。前面的 0 也不是浪费 —— 它是"路线标记"。
2. 图片:切格子 + 每格定色
图片是"面上连续"的信息,所以要在空间上切。
第一步 采样:切成像素
把画面横竖切成网格,每个格子叫一个像素(Pixel)。
- 格子越密 → 分辨率越高 → 越清晰
- 1000 × 800 的图 = 80 万个像素 = 80 万个格子要各自记颜色
第二步 量化:每个像素的颜色归到有限档位
| 图片类型 | 每个像素存几个数 | 每个数范围 |
|---|---|---|
| 二值图(纯黑白) | 1 个 | 0 或 1 |
| 灰度图 | 1 个 | 0(黑)~ 255(白) |
| 彩色图(RGB) | 3 个(红、绿、蓝) | 各 0 ~ 255 |
因为 8 位二进制正好能表示 0~255,一个字节刚好装一个通道。 三个通道各 256 档 → 256 × 256 × 256 = 1677 万种颜色 这就是所谓的"24 位真彩色"(8 + 8 + 8 = 24 位)。
算一笔账:一张图到底占多大
一张 1920 × 1080 的彩色照片(未压缩)
= 1920 × 1080 × 3 字节
≈ 6.2 MB
1920×1080×3 ≈ 6.2MB,一秒钟视频 30 帧就是 186 MB/秒,一张 32GB 的内存卡只够存 3 分钟。
图片压缩的两种思路:
- 无损(PNG):只把重复的 0/1 用短写法代替,一个像素都不丢
- 有损(JPG):把相邻的、人眼分辨不出的细微色差直接抹平。丢掉 5% 的数据,肉眼几乎看不出,体积能减到 1/10
3. 声音:按时间取样 + 定音量档位
声音是"时间上连续"的信息,所以要在时间上切。
第一步 采样:隔一小段时间量一次
真实的声音是一根光滑的连续曲线(空气振动的压强变化)。 电脑没法存整根曲线,只能在时间轴上每隔一小段"量一下当前音量"。
| 参数 | 含义 | 常见值 |
|---|---|---|
| 采样率 | 一秒钟量多少次 | 电话 8 kHz / CD 44.1 kHz / 高解析 96 kHz |
| 位深 | 每次量的音量分几档 | CD 16 位(65536 档) / 专业 24 位 |
采样率只要 高于声音最高频率的 2 倍,就能无损还原。 人耳最多听到约 20 kHz → 所以 CD 用 44.1 kHz(≥ 20×2)。 采样率不够会怎样?高频声音被"假装"成低频,听起来像金属摩擦声 —— 这叫混叠失真。
第二步 量化:音量归到有限档位
16 位位深 = 纵轴切 65536 档。真实音量 0.5000001 和 0.5000002 会被存成同一个数。
把"黄线(电脑还原)"和"橙线(真实)"之间的缝想清楚: - 采样率决定横向密不密(缝的宽度) - 位深决定纵向细不细(缝的高度) 缝永远补不满,但可以小到耳朵听不出来。
算一笔账:CD 音质多大
44.1 kHz × 16 位 × 2 个声道
= 44100 × 2 字节 × 2
≈ 176 KB / 秒
≈ 10.6 MB / 分钟的 WAV 文件
所以有了 MP3 —— 有损压缩。它利用"人耳对某些频率不敏感 + 强音会盖住邻近弱音"的心理声学原理,把听不见的成分直接删掉,体积能压到 1/10。
4. 视频:连续图片快放 + 只记变化
视频 = 一秒钟放几十张图。
| 概念 | 含义 |
|---|---|
| 帧(Frame) | 一张静止画面 |
| 帧率(fps) | 一秒放多少张,电影 24、电视 25/30、游戏 60+ |
1080p、30 帧/秒、未压缩:
1920 × 1080 × 3 × 30 ≈ 186 MB/秒
一部 2 小时的电影 ≈ 1.3 TB。一块 1TB 硬盘装不下一部电影。
视频压缩的两个关键招数
① 只记"变了的地方"
相邻两帧往往 95% 是一样的(背景没动,只有人在动)。 所以视频不存每一整帧,而是存:
| 帧类型 | 存什么 | 占体积 |
|---|---|---|
| I 帧(关键帧) | 一整张完整的图 | 大 |
| P 帧(前向预测帧) | 只存"相对上一帧变了什么" | 小 |
| B 帧(双向预测帧) | 只存"相对前后帧变了什么" | 最小 |
因为你跳到了一个 P 帧或 B 帧上,而它只存了变化量,没有完整画面。 播放器必须往回找到最近的 I 帧,才能算出完整画面。找不到就出现一块块马赛克。
② 变暗的地方多给码率
人眼对暗部的细节不敏感。编码器会把"码率预算"优先分配给画面明亮、细节多的区域。
5. 一表总结:四种信息对比
| 在什么维度切 | 切完每格存什么 | 无损格式 | 有损格式 | |
|---|---|---|---|---|
| 文字 | 不用切(天然离散) | 一个编号 | .txt | — |
| 图片 | 空间(切成格子) | 1~3 个颜色值 | .png .bmp | .jpg .webp |
| 声音 | 时间(按秒取样) | 音量档位 | .wav .flac | .mp3 .aac |
| 视频 | 时间 + 空间 | 每帧的像素,且只记变化 | 极少见 | .mp4 .mkv .avi |
- 离散的信息(文字、数字)→ 直接查表,可以做到完全无损
- 连续的信息(图、声、视频)→ 必须采样量化,一定丢东西,只能"丢得让人察觉不到"
6. 常见误区自查
- "无损就是没丢" —— 无损是"丢的部分能用规则完美算回来",不是没采样。
- "分辨率越高越清楚" —— 如果原图本来就只有 100 万像素,放大到 400 万像素只会变糊(插值猜出来的假细节)。
- "MP3 比 WAV 音质好,因为文件大" —— 反过来,WAV 是无损未压缩的,MP3 是从中"删东西"得来的。
- "乱码是文件坏了" —— 99% 是编码不匹配(GBK 存、UTF-8 读),改个编码就能读。
- "64G 手机拍 4K 能拍很久" —— 4K/60fps 一分钟约 400MB,64G 只能拍约 2.5 小时。
- "JPG 反复编辑没问题" —— 每次保存都重新丢一次数据,编辑 10 次后画质明显掉。所以中间稿要用 PNG/TIFF。
7. 自测题(先自己答,再点开答案)
GBK:2 字节;UTF-8:3 字节。 这就是为什么同一个文件换个编码打开,文件大小会变。 [!question]- Q2. 一张 1000 × 1000 的 24 位真彩色图,未压缩占多大? 1000 × 1000 × 3 字节 = 3,000,000 字节 ≈ 2.86 MB (除以 1024 两次:3000000 ÷ 1024 ÷ 1024 ≈ 2.86) [!question]- Q3. CD 为什么用 44.1 kHz 这个"奇怪"的数字? 依据采样定理:采样率需 ≥ 声音最高频率的 2 倍。 人耳上限约 20 kHz → 至少 40 kHz,取 44.1 kHz 留余量。 [!question]- Q4. 看视频时拖进度条出现花屏马赛克,为什么? 因为定位到的可能是 P 帧 / B 帧,它们只存了相对变化,没有完整画面。 播放器需要回溯到上一个 I 帧(关键帧)才能重建画面。 [!question]- Q5. 为什么"数字化"比"模拟"抗损? 模拟信号是连续的,每一份拷贝都叠加误差,越拷越坏; 数字信号只有高/低两档,只要还能分辨这两个档位,拷一万份也不变。
8. 下一步学什么
- [x] 用电表示计算:计算机怎么做加法 → 已写成 03 用电表示计算-计算机加法运算(逻辑门 → 加法器 → 补码)
- [ ] 十六进制与负数表示 —— 为什么颜色写
#FF8800、11111111是不是 −1(原码/反码/补码) - [ ] 压缩原理 —— 哈夫曼编码、RLE 游程编码,看 ZIP 到底做了什么
- [ ] 文件与扩展名 —— 为什么改后缀名不能真的转换格式
- [ ] 计算机五大部件 —— CPU 拿到这些 0/1 之后做了什么
- [ ] 网络是怎么通的 —— 这些 0/1 怎么从你的电脑跑到别人手机上
相关笔记
- 01 二进制原理入门 ← 第 01 篇:0 和 1 本身怎么算
- 03 用电表示计算-计算机加法运算 → 下一篇:电路怎么把这些 0/1 算出来
- 📇 计算机基础 · 索引
- 🏠 返回主页