二进制与字符编码完全指南
一切从逻辑电路说起
计算机由逻辑电路组成,逻辑电路只有两种状态:开 和 关。
这两种状态用数字 0 和 1 来表示,这就是二进制的本质。
二进制如何表示更多信息
每个位置只能是 0 或 1,增加位置数量就能表示更多状态:
| 位数 | 组合数 | 能表示的范围 |
|---|---|---|
| 1 位 | 2¹ = 2 | 0、1 |
| 2 位 | 2² = 4 | 00、01、10、11 |
| 8 位 | 2⁸ = 256 | 0 ~ 255 |
8 位二进制也称为一个字节(BYTE),是计算机存储的基本单位。
存储单位换算
| 单位 | 换算 |
|---|---|
| 1 BYTE(字节) | = 8 BIT |
| 1 KB(千字节) | = 1024 BYTE |
| 1 MB(兆字节) | = 1024 KB |
| 1 GB(吉字节) | = 1024 MB |
| 1 TB(太字节) | = 1024 GB |
1024 正好是 2¹⁰,这也是为什么计算机中使用二进制换算。
字符编码的演进
ASCII 码表
最早的字符编码标准,使用 8 位(1 字节) 表示 128 种符号(0~127)。
- 英文字母
A的十进制值是 65,二进制为1000001 - 数字
0的十进制值是 48,二进制为0110000
ASCII 只覆盖了英文字母和少量符号,无法表示中文和其他语言。
中文编码的发展
| 编码标准 | 年代 | 字符数 | 说明 |
|---|---|---|---|
| GB2312 | 80 年代 | 7,445 | 最早的中文编码,支持简体中文 |
| GBK | 90 年代 | 20,000+ | 支持简体和繁体中文 |
| GB18030 | 2000 年 | 27,484 | 支持简体、繁体、维吾尔文、藏文等 |
GB18030 中每个字符由 1、2 或 4 个字节组成。
Unicode — 全球统一编码
为了解决不同编码互不兼容的问题,Unicode 应运而生。
Unicode 规定每个字符对应一个唯一的数字(称为码点),但它只负责制定编号,不负责如何存储。
UTF-8 — Unicode 的主流存储方式
UTF-8 是一种变长编码方式:
| 字符类型 | 占用字节 |
|---|---|
| 英文字母 | 1 字节(与 ASCII 兼容) |
| 中文等字符 | 3 字节 |
例如,汉字「乘」:
- Unicode 码点:
4E58(十六进制) - 十进制:
20056 - 二进制:
100111001011000
编程验证:CHR() 与 ORD()
在 Python 中可以验证字符编码:
1 | |
核心总结
不管是中文还是英文,在计算机中都以字符形式存在,每个字符对应一个整数(可用十进制、二进制、十六进制表示)。最终所有数据都会被转换为二进制,因为计算机只识别 0 和 1。
| 知识点 | 关键内容 |
|---|---|
| 二进制 | 0 和 1,逢二进一 |
| 存储单位 | 1 BYTE = 8 BIT,1024 换算 |
| ASCII | 8 位,128 个符号,只适合英文 |
| GB2312/GBK/GB18030 | 中文编码演进 |
| Unicode | 全球统一字符编号 |
| UTF-8 | Unicode 的变长存储方式,英文 1 字节,中文 3 字节 |
二进制与字符编码完全指南
https://luoshuang.org/2026/04/18/二进制与字符编码完全指南/