Chap2 数据的表示、运算与校验
返回:0500 计算机组成原理总目录 · 上一章:0501 Chap1 计算机系统概述 · 下一章:0503 Chap3 CPU 子系统
1、学习目标
机器只能直接处理二进制。本章要解决:整数、负数、小数、字符、错误检测在机器里如何表示,以及这些表示会如何影响运算结果。
| 模块 | 要掌握的内容 |
|---|---|
| 数制 | 二进制、八进制、十六进制和转换 |
| 整数表示 | 原码、反码、补码、移码 |
| 定点/浮点 | 定点小数、IEEE 754 浮点数 |
| 字符编码 | ASCII、汉字编码、Unicode 直觉 |
| 基本运算 | 加减乘除、移位、溢出 |
| 数据校验 | 奇偶校验、海明码、CRC |
2、数制与位权
二进制数:
1 | (1011.01)_2 = 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 + 0*2^-1 + 1*2^-2 |
常见换算:
| 进制 | 特点 |
|---|---|
| 二进制 | 机器内部表示 |
| 八进制 | 3 位二进制对应 1 位八进制 |
| 十六进制 | 4 位二进制对应 1 位十六进制 |
| 十进制 | 人类常用 |
十六进制很适合读机器数据,因为一个字节正好是两位十六进制。
3、原码、反码、补码、移码
设机器字长为 n。
| 表示 | 规则 | 特点 |
|---|---|---|
| 原码 | 符号位 + 数值绝对值 | 直观,但有 +0 和 -0 |
| 反码 | 正数同原码,负数数值位取反 | 仍有双零 |
| 补码 | 正数同原码,负数按模取补 | 加减统一,无双零 |
| 移码 | 真值加偏置 | 常用于浮点阶码 |
补码范围:
1 | n 位补码:[-2^(n-1), 2^(n-1)-1] |
8 位补码范围:
1 | [-128, 127] |
补码的好处:
- 加法器可以同时处理加法和减法。
- 零只有一种表示。
- 最高位既参与数值,又可作为符号判断。
4、补码运算与溢出
补码加法直接按二进制相加,丢弃最高进位。
溢出判断:
| 情况 | 是否溢出 |
|---|---|
| 正数 + 正数 = 负数 | 溢出 |
| 负数 + 负数 = 正数 | 溢出 |
| 正负相加 | 不会溢出 |
也可用符号位进位判断:
1 | 最高数值位进位 Cn-1 与符号位进位 Cn 不同,则溢出。 |
注意:无符号数关注进位,有符号补码关注溢出,两者不是同一个概念。
5、定点数
定点表示把小数点固定在某个位置。
| 类型 | 说明 |
|---|---|
| 定点整数 | 小数点默认在最低位之后 |
| 定点小数 | 小数点默认在符号位之后 |
定点数硬件实现简单,常用于整数运算、嵌入式或对精度范围可控的场景。
6、浮点数
浮点数采用类似科学计数法:
1 | N = (-1)^S * M * R^E |
IEEE 754 单精度 32 位:
| 字段 | 位数 | 含义 |
|---|---|---|
| S | 1 | 符号位 |
| E | 8 | 阶码,采用偏置表示 |
| M | 23 | 尾数小数部分 |
单精度阶码偏置:
1 | Bias = 127 |
规格化数默认尾数有隐藏的最高位 1:
1 | 1.M |
浮点数要重点理解:
- 表示范围有限。
- 很多十进制小数无法精确表示。
- 运算需要对阶、尾数运算、规格化、舍入。
- 浮点加法不一定满足数学上的结合律。
7、字符编码
ASCII 使用 7 位编码常用英文字符:
1 | 'A' = 65 = 0x41 |
中文字符通常涉及更复杂的编码体系,如 GB 系列、Unicode、UTF-8 等。
要区分:
| 概念 | 说明 |
|---|---|
| 字符集 | 有哪些字符 |
| 编码 | 字符如何映射为数字 |
| 编码格式 | 数字如何存成字节序列 |
UTF-8 是变长编码,英文字符 1 字节,中文常用 3 字节。
8、基本运算方法
8.1 加减法
补码系统中:
1 | x - y = x + (-y) |
因此减法可以转成加法。
8.2 移位
| 类型 | 含义 |
|---|---|
| 逻辑左移 | 低位补 0 |
| 逻辑右移 | 高位补 0 |
| 算术右移 | 高位补符号位 |
算术右移常用于有符号数除以 2 的近似,但负数舍入方向要小心。
8.3 乘除法
硬件乘法可以看作移位和加法的组合;除法可以看作移位和减法的组合。现代 CPU 通常有专门乘除法部件,但理解移位加减有助于看懂底层实现。
9、数据校验
数据传输和存储可能出错,因此需要校验。
| 方法 | 能力 |
|---|---|
| 奇偶校验 | 检测奇数位错误,不能定位 |
| 海明码 | 可纠正一位错误,检测部分多位错误 |
| CRC | 检错能力强,常用于网络和存储 |
9.1 奇偶校验
增加 1 位校验位,使 1 的个数为奇数或偶数。
缺点:如果同时错两位,奇偶性不变,检测不到。
9.2 海明码
海明码通过多个校验位形成综合症,用来定位错误位置。
常见规则:
1 | 校验位放在 1, 2, 4, 8 ... 这些 2 的幂位置。 |
9.3 CRC
CRC 把数据看成多项式,用生成多项式做模 2 除法,余数作为校验码。接收端重复计算余数判断是否出错。
10、易错点
| 易错点 | 修正 |
|---|---|
| 补码和原码混用 | 运算主要用补码 |
| 无符号进位当有符号溢出 | 两者判断标准不同 |
| 浮点数以为都精确 | 很多十进制小数无法精确二进制表示 |
| 逻辑右移和算术右移混淆 | 有符号数通常关注算术右移 |
| 奇偶校验以为能纠错 | 奇偶校验只能检错,不能定位 |
11、复盘清单
| 检查项 | 状态 |
|---|---|
| 能在二进制、十六进制之间快速转换 | 待复盘 |
| 能写出 8 位补码范围 | 待复盘 |
| 能判断补码加法溢出 | 待复盘 |
| 能拆解 IEEE 754 单精度字段 | 待复盘 |
| 能区分字符集、编码和编码格式 | 待复盘 |
| 能说明奇偶校验、海明码、CRC 的差别 | 待复盘 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ruiqy~!







