【王道考研·计算机组成原理】第2章 数据的表示和运算(整章完整版)

【王道考研·计算机组成原理】第2章 数据的表示和运算(整章完整版)
Austoin引言
第二章是计组里最容易“算错细节”的章节。
它的核心不是死记格式,而是把三件事打通:
- 数在机器里怎么编码。
- 运算器按什么规则做加减乘除。
- 溢出、舍入、精度损失为什么发生。
这一章学扎实,后面 ALU、CPU 控制和异常中断会更顺。
图像化理解(Mermaid)
mindmap
root((第2章 数据表示与运算))
数制与编码
二八十六进制转换
BCD
字符编码
定点表示
原码
反码
补码
移码
定点运算
加减法
乘法
除法
溢出判断
浮点表示
阶码
尾数
规格化
IEEE754
一、数制与编码基础
1. 进位计数制
- 二进制、八进制、十进制、十六进制转换是基础题。
- 十六进制和二进制按 4 位一组对应。
- 八进制和二进制按 3 位一组对应。
2. 机器数与真值
- 真值:人类理解的带符号数值。
- 机器数:按编码规则写入寄存器/存储器的比特串。
- 通常最高位为符号位(定点有符号场景)。
3. 常见编码
- BCD:4 位编码 1 个十进制数字。
- ASCII:字符编码(考点常在“码值区间”)。
- 余 3 码、2421 码属于十进制编码,格雷码相邻编码仅 1 位不同,常用于降低转换误差。
4. 校验码(补充考点)
- 奇偶校验:可检错但不能纠错。
- CRC:适合成块数据传输检错。
- 海明码:可实现单比特纠错、双比特检错(常考编码位个数)。
二、定点数表示
1. 原码、反码、补码、移码
原码
- 符号位 + 数值绝对值。
- 存在
+0和-0两种零。
反码
- 正数反码等于原码。
- 负数反码为原码符号位不变,其余位按位取反。
补码(重点)
- 正数补码等于原码。
- 负数补码 = 反码 + 1。
- 补码实现“加减统一成加法”。
n位补码范围:[-2^(n-1), 2^(n-1)-1]。
移码
- 通常用于表示浮点阶码。
- 移码 = 真值 + 偏置值(bias)。
2. 为什么补码更适合硬件
- 0 唯一表示,简化硬件。
- 减法可转加法,ALU 结构统一。
- 符号位可参与运算。
三、定点加减运算与溢出
1. 补码加减规则
- 按无符号二进制相加。
- 舍弃最高位进位(超出字长部分)。
- 结果按补码解释。
2. 溢出判断(高频)
同号相加、异号相减更可能溢出。
常用判据:
- 两个同号数相加,结果符号变了,则溢出。
- 双符号位法:最高两位不同表示溢出。
- 进位判别法:符号位的进位与最高数值位进位不同,则有符号溢出。
3. 逻辑移位与算术移位
- 逻辑左移/右移:空位补 0(常用于无符号)。
- 算术右移:符号位扩展(有符号补码常用)。
- 算术左移与逻辑左移在多数实现中表现一致,但溢出语义要区分。
- 右移通常不会产生有符号溢出,但可能因移出低位而丢失精度。
4. 条件码与状态标志位
- CF:主要反映无符号加减中的进位或借位情况。
- OF:反映有符号运算结果是否超出补码表示范围。
- SF:结果符号位,常用于有符号比较。
- ZF:结果是否为 0。
- 考题常把 CF 和 OF 对比:前者更偏向无符号意义,后者更偏向有符号意义。
5. 数据类型转换规则(补充考点)
- 同字长下有符号数与无符号数互转时,位模式不变,只是解释方式不同。
- 小字长扩到大字长时,有符号数常做符号扩展,无符号数常做零扩展。
- 大字长缩到小字长时通常直接截去高位,可能导致值改变甚至符号变化。
int -> float/double可能丢失精度;float/double -> int可能发生截断或越界。
四、定点乘除法(理解级)
1. 乘法
- 可理解为“部分积 + 移位累加”。
- 常见算法:Booth(考试多考思想与步骤)。
- 原码一位乘法本质是“判乘数末位 -> 加部分积 -> 右移”。
2. 除法
- 核心是“试商 + 恢复/不恢复余数”。
- 关注符号处理与余数范围。
- 不恢复余数法通过加减交替减少一次恢复操作,是考题常见比较点。
3. 加法器与硬件实现
- 一位全加器由加数、被加数和低位进位产生本位和与高位进位。
- 串行进位加法器结构简单,但高位必须等待低位进位传播。
- 先行进位加法器预先计算进位生成/传递关系,用硬件复杂度换速度。
- 在先行进位思想中,通常把“本位是否产生进位”与“本位是否传递进位”作为核心中间量,再并行求出高位进位。
五、浮点数表示与 IEEE754
1. 基本形式
1 | N = (-1)^S × M × 2^E |
其中:
S是符号位。M是尾数(规格化时通常形如 1.x)。E是指数。
2. 规格化
- 目的:保证表示唯一性、提升精度利用率。
- 二进制规格化通常要求尾数最高有效位为 1。
- 左规会使阶码减小,右规会使阶码增大;浮点加减中常先对阶,再尾数运算,再规格化。
3. IEEE754 单精度(32 位)
- 符号位
S:1 位。 - 指数域
E:8 位(偏置 127)。 - 尾数字段
F:23 位(隐藏位机制)。
4. IEEE754 双精度(64 位)
- 符号位 1 位。
- 指数域 11 位(偏置 1023)。
- 尾数字段 52 位。
5. 特殊值
E全 0:非规格化数或 0。E全 1 且F全 0:±∞。E全 1 且F非 0:NaN。
6. 浮点运算高频细节
- 对阶只能让小阶向大阶对齐,否则会丢失高位有效信息。
- 尾数右移时常保留保护位、舍入位、粘滞位,以降低舍入误差。
- 尾数溢出通常可通过右规修正;真正决定浮点溢出的关键是阶码是否越界。
7. 浮点加减法五步法
- 对阶:小阶向大阶对齐。
- 尾数运算:做加法或减法。
- 规格化:必要时左规或右规。
- 舍入:结合附加位修正尾数。
- 判溢:重点看阶码是否越界。
8. 常见舍入方式
- 0 舍 1 入:看被舍去部分最高位决定是否加 1。
- 恒置 1:右移后末位恒置 1,属于一种近似处理方式。
- 直接截断:实现最简单,但精度损失最大。
六、PDF 例题与考点补充(第2章)
例题 1:8 位补码表示范围
题目:8 位补码整数可表示范围是多少。
解:
1 | [-2^7, 2^7 - 1] = [-128, 127] |
例题 2:补码求值
题目:11110110(8 位补码)对应十进制。
解:
- 符号位为 1,说明是负数。
- 取反加一:
00001010,即 10。 - 真值为
-10。
例题 3:补码加法溢出
题目:8 位补码中 01111100 + 00001010 是否溢出。
解:
1 | 01111100(124) + 00001010(10) = 10000110 |
两正数相加得负数,溢出。
例题 4:浮点规格化
题目:将二进制 0.001101 规格化。
解:
1 | 0.001101 = 1.101 × 2^-3 |
例题 5:IEEE754 偏置理解
题目:单精度指数域存储值 130,对应真实指数是多少。
解:
1 | E = 130 - 127 = 3 |
例题 6:右移区别
题目:10010000 做逻辑右移 2 位与算术右移 2 位结果分别是什么。
解:
- 逻辑右移:
00100100。 - 算术右移:
11100100(符号扩展)。
例题 7:两个零的问题
题目:为什么补码系统中只有一个 0。
解:
- 补码把负数映射到模环。
+0与-0表示合并,简化判断逻辑。
七、高频易错点
- 把“反码 + 1”写成“原码 + 1”。
- 溢出判断只看进位而不看符号关系。
- 把逻辑右移当算术右移。
- 忘记 IEEE754 指数域是偏置编码。
- 浮点比较时忽略舍入误差与精度损失。
八、本章速记清单
n位补码范围:[-2^(n-1), 2^(n-1)-1]。- 负数补码:反码 + 1。
- 同号相加符号变,通常溢出。
- 单精度偏置值是 127。
- 浮点数由符号、阶码、尾数组成。
总结
第二章本质上是在回答:
- 数据怎样被机器“编码”。
- 运算怎样在编码层面“可实现”。
- 精度与溢出怎样被“系统化处理”。
把补码与 IEEE754 真正吃透,后面 ALU、流水线异常和数值题会非常稳。
作者:[Austoin]
参考来源:E:\PDF\计算机组成原理(含新大纲考点).pdf、E:\PDF\2027计算机组成原理_高清带书签版.pdf(章节知识点整合)








