计算机组成原理第 2 章:数据的表示和运算总览
这一页只负责导航,不装内容。每个节号点进去就是那一节的完整讲义。
第 2 章回答两个问题:一串二进制位怎样才代表一个数,以及硬件怎样对这些位做运算。
主线是一条被”位数有限”这一约束推着走的链条:
位怎么写(2.1.1)→ 符号怎么编,让减法消失(2.1.2)→ 落到真实机器和 C 语言(2.1.3、2.1.4)→ 加法器怎么造、怎么变快(2.2.1)→ 移位这个最便宜的运算(2.2.2)→ 加减与溢出判定(2.2.3)→ 乘除只能迭代(2.2.4)→ 定点的范围精度矛盾解不开,改用浮点(2.3.1)→ 浮点加减多出来的四步(2.3.2)→ 落到 C(2.3.3)→ 最后放进内存(2.3.4)
贯穿全章有两条隐线,值得单独盯住:
① “有符号还是无符号”是解释的属性,不是数据的属性。 硬件里只有一串位、一个加法器;区别只发生在五处(溢出判据、比较、右移、除法、扩展)。
② 每一次提速都是”面积换时间”。 先行进位加法器、桶形移位器、阵列乘法器是同一个设计哲学的三次应用;到第 5 章的流水线、第 3 章的 Cache 还会再遇到。
章节导航
2.1 数制与编码 ✅
| 节 | 页面 | 一句话 |
|---|---|---|
| 2.1.1 | 进位计数制及其相互转换 | 小数转换可能不终止;判据是能否写成 |
| 2.1.2 | 定点数的编码表示 | 补码的两种理解:模运算解释减法消失,权值解释符号位可参与运算 |
| 2.1.3 | 整数的表示 | 有符号与无符号是同一串位、同一个加法器,区别只在五处 |
| 2.1.4 | C 语言中的整数类型及类型转换 | 扩展补什么由源类型决定;同宽度混合时无符号”传染” |
2.2 运算方法和运算电路 ✅
| 节 | 页面 | 一句话 |
|---|---|---|
| 2.2.1 | 基本运算部件 | 加法的瓶颈是进位链;先行进位用面积换时间 |
| 2.2.2 | 定点数的移位运算 | 两个判据:空位补什么 + 移出位去哪;算术右移向负无穷取整 |
| 2.2.3 | 定点数的加减运算 | CF 服务无符号、OF 服务有符号;溢出三种判据等价 |
| 2.2.4 | 定点数的乘除运算 | Booth = “连续 1 段换成一加一减”;除法是唯一会触发异常的定点运算 |
2.3 浮点数的表示与运算 ✅
| 节 | 页面 | 一句话 |
|---|---|---|
| 2.3.1 | 浮点数的表示 | IEEE 754 偏置是 |
| 2.3.2 | 浮点数的加减运算 | 溢出只看阶码;右规至多一次、左规可能多次 |
| 2.3.3 | C 语言中的浮点数类型 | int→double 精确,int→float 会丢精度 |
| 2.3.4 | 数据的大小端和对齐存储 | 大小端与对齐正交;大小端只作用于多字节标量内部 |
本章高频边界
| 边界 | 判据 | 在哪 |
|---|---|---|
| 进制 vs 编码 | 同一位串在不同编码下是不同的数 | 2.1.1 |
| 容量 K/M/G vs 速率 K/M/G | 2.1.1 | |
| 原码 / 反码 / 补码 / 移码 | 零唯一吗、符号位能否参与运算、范围是否对称 | 2.1.2 |
| 四种求补码的方法 | 取反含不含符号位 | 2.1.2 |
| 有符号 vs 无符号 | 五处区分:溢出判据 / 比较 / 右移 / 除法 / 扩展 | 2.1.3 |
| 回绕 / 溢出 / 未定义行为 | 三个层面的概念,不能混叫 | 2.1.3 |
| 零扩展 vs 符号扩展 | 由源类型决定,与目标无关 | 2.1.4 |
| 值转换 vs 位型重解释 | (int)f vs *(int*)&f | 2.1.4 |
| 串行进位 vs 先行进位 | 延迟 | 2.2.1 |
| 逻辑移位 vs 算术移位 | 补 0 还是补符号位 | 2.2.2 |
| 算术左移 vs 逻辑左移 | 位串相同,判溢出不同 | 2.2.2 |
| 算术右移 vs C 的除法 | 向负无穷 vs 向零,负数不整除时差 1 | 2.2.2 |
| CF vs OF | 进位是”装不下”,溢出是”符号被改变” | 2.2.3 |
双符号位 01 / 10 | 高位是真符号,低位是表面符号;01 上溢 | 2.2.3 |
| 原码乘 vs 补码乘 | 部分积逻辑右移 vs 算术右移 | 2.2.4 |
| 恢复余数 vs 加减交替 | 加回除数 vs 下轮改为加 | 2.2.4 |
| 整数除 0 vs 浮点除 0 | 异常 vs | 2.2.4 |
| IEEE 754 偏置 vs 教材移码偏置 | 2.3.1 | |
| 规格化 vs 精确 | 规格化只管编码唯一 | 2.3.1 |
| 尾数溢出 vs 浮点溢出 | 浮点溢出只看阶码 | 2.3.2 |
| 左规 vs 右规 | 右规至多一次;左规可能多次且危险 | 2.3.2 |
int→float vs int→double | 24 位 vs 53 位有效位 | 2.3.3 |
| 大小端 vs 边界对齐 | 字节次序 vs 起始地址,两者正交 | 2.3.4 |
计算模板
| 题型 | 步骤 |
|---|---|
| 进制转换 | 整数除基取余、逆序;小数乘基取整、顺序; |
| 求补码 | 手算用扫描法(第一个 1 及右边照抄,左边取反);求相反数用连符号位全取反加 1 |
| 判溢出 | ① |
| Booth 乘法 | 附加 01 加 / 10 减 / 其余不动)→ 算术右移 → 共 |
| 加减交替除法 | 余数 |
| IEEE 754 编码 | ① 转二进制 ② 规格化成 |
| IEEE 754 解码 | ① 按 1/8/23 拆字段 ② 先判五类中的哪一类 ③ 再套对应公式 |
| 浮点加减 | 对阶(小向大)→ 求和 → 规格化 → 舍入 → 判溢出(只看阶码) |
| 跨存储字数 | |
| 结构体大小 | 逐成员按对齐要求补填充;总大小是最大成员对齐要求的整数倍 |
复习顺序
- 2.1.1:只需抓两点——小数转换可能不终止(浮点误差的源头)、位数与状态数(后面每章都要用)。
- 2.1.2:本章地基。补码的两种解释都要会:模运算解释”减法为什么消失”,权值解释”符号位为什么能参与运算”。四种求补码的方法要能分清取反含不含符号位。
- 2.1.3 → 2.1.4:把编码落到 C。核心是**“硬件不区分有无符号”这一句**,以及它导出的五处区分。类型转换的三个动作(重解释 / 扩展 / 截断)要分开记。
- 2.2.1:抓进位链是瓶颈这一条主线,先行进位的式子要能自己展开一遍。
- 2.2.2:两个判据先立住,再记三类移位的补位表。算术右移与 C 除法的取整方向差异必考。
- 2.2.3:本章计算题主战场。三种溢出判据、四个标志位要熟练;那张”同一次加法的两种解释”的表建议默写一遍。
- 2.2.4:Booth 的判断表必须能背,原理(连续 1 段换成一加一减)理解了就不会记反。加减交替法注意末轮校正。
- 2.3.1:本章第二个重点。五类编码先判类别再套公式;偏置
、非规格化数指数 这两处极易失分。 - 2.3.2:五步流程按顺序记,“溢出只看阶码”是第一考点。理解左规为什么危险。
- 2.3.3 → 2.3.4:收尾。2.3.3 的恒等式判断表建议整张记住;2.3.4 的四条否定(大小端不改位序 / 不改数组顺序 / 不影响
char/ 不改寄存器数值)要能立刻答出。
说明
- 本章 12 页对应教材的 12 个三级节,一节一页。 节号以 王道 2026 教材目录(权威参照)为准。
- 旧版三篇笔记已归档(见 归档说明(本地资料))。归档前逐篇复核,发现旧笔记的节号有三处错误:把 BCD 码编为 2.1.2、把 IEEE 754 编为 2.3.2、把除法单列为 2.2.5。这三处在本次重构中已按权威目录更正。
- 本章对话素材极少(109 条提问中仅 5 条),原因见 提问档案的说明(本地资料)。其余各节按教材独立撰写,完整性不受影响。
链接
- 📖 名词库:第 2 章名词库(77 条 + 高频范围限定清单)
- 📜 原始提问档案:第 2 章 原始提问档案(本地资料)(5 条)
- ➡️ 下一章:第 3 章:存储系统
- 🏗️ 重构施工文档:OS + 计组 笔记体系重构计划(本地资料)