Appearance
408 计算机组成原理
408
计算机组成原理
CO-02-03 补码加减运算与溢出判断
一、定位信息
| 项目 | 内容 |
|---|---|
| 所属圈层 | 核心层 |
| 考点热度 | H级(高频重点) — 近5年真题中高频出现,选择题和综合应用题均有涉及,单次分值3–6分;溢出判断方法是常考重点 |
| 前置知识回顾 | 需掌握补码的定义与表示方法(CO-02-02),理解原码、反码、补码之间的转换关系 |
| 知识网络定位 | 本单元是定点数编码(CO-02-02)的直接应用,也是理解ALU运算器(CO-05-02)硬件设计的基础,溢出判断方法在浮点数运算(CO-02-06)中也会用到 |
二、知识点讲解
2.1 补码加法运算
核心公式:
即:两个数的补码之和等于两个数之和的补码。这意味着加法器可以直接对补码进行加法运算,无需判断符号,大大简化了硬件设计。
为什么补码可以将减法转为加法?
补码的本质是"模运算"。以钟表为例:当前时间是3点,要往回拨5小时(减5),等价于往前拨7小时(加7),因为 。同理,在补码系统中:
2.2 补码减法运算——由加法器实现
关键操作:求
方法:将 连同符号位一起取反,末位加1。
即:( 表示逐位取反)
示例:,,字长8位,求
- (45的二进制)
- (23的二进制)
- (舍弃进位)
- 结果 ✓()
硬件实现说明:在ALU中,减法通过一个取反器(对 按位取反)和一个加1信号(将最低位进位设为1)来实现 的补码,然后复用加法器完成减法。这比设计独立的减法器更经济。
2.3 溢出的产生与判断
什么是溢出?
溢出是指运算结果超出了给定位数所能表示的范围。只有当两个同号数相加时才可能溢出(异号数相加不会溢出,因为结果的绝对值一定小于等于两个操作数中绝对值较大的那个)。
溢出的表现:
- 两个正数相加得到负数(正溢出)
- 两个负数相加得到正数(负溢出)
三种溢出判断方法:
方法一:单符号位法(根据操作数和结果的符号判断)
设 、 为操作数的符号位, 为结果的符号位。
即:
- 正 + 正 = 负 → 溢出()
- 负 + 负 = 正 → 溢出()
方法二:双符号位法(变形补码 / 模4补码)
用两位符号位 ( 为高位符号, 为低位符号,正常情况下 ):
- :结果为正,无溢出
- :结果正溢出(上溢)
- :结果负溢出(下溢)
- :结果为负,无溢出
溢出判断:(两位符号位异或), 表示溢出。
方法三:进位判断法
设最高数值位的进位为 ,符号位的进位为 (即从符号位向更高位的进位)。
- (一个有进位,一个没有)→ 溢出
- (都有进位或都没有)→ 无溢出
示例(验证三种方法的一致性):字长4位(含1位符号位),,
0110 (+6)
+ 0101 (+5)
------
1011 (-5?) ← 符号位为1,但两个正数相加- 方法一: → → 溢出 ✓
- 方法二:双符号位为 ,双符号位 → 正溢出 ✓
- 方法三:(1+1进位),(0+0无进位), → 溢出 ✓
2.4 符号扩展
将一个较短的补码数扩展为较长的补码数时:
- 正数:高位补0
- 负数:高位补1
即"符号扩展"——用符号位填充所有新增的高位。
示例: 的4位补码 → 8位补码
验证:; ✓
三、记忆与理解辅助
3.1 口诀与技巧
- 补码加减口诀:"加法直接加,减法取反加一再相加,溢出符号异或查"
- 溢出判断速记:
- 单符号位:同号相加异号无("同号相加才可能溢出")
- 双符号位:01正溢10负溢,00正数11负数("01上10下")
- 进位法:最高位进位和符号位进位不同则溢出("进位不同就是溢")
- 符号扩展口诀:"正数补0,负数补1"——补的是符号位
3.2 对比表:三种溢出判断方法
| 方法 | 判断条件 | 优点 | 缺点 |
|---|---|---|---|
| 单符号位法 | 符号位运算结果异常 | 直观,逻辑简单 | 需要额外的判断电路 |
| 双符号位法 | 判断电路最简单,还能区分正/负溢出 | 需要多一位存储空间 | |
| 进位判断法 | 不需要额外存储位 | 需要获取两个进位信号 |
3.3 补码加减运算完整流程图
输入:[A]补、[B]补、操作码OP(加/减)
│
├── OP为加法 → 直接计算 [A]补 + [B]补
│
└── OP为减法 → 先求 [-B]补(取反+1)→ 再计算 [A]补 + [-B]补
│
▼
得到 [S]补(含溢出检测)
│
├── 检测溢出(三种方法任选其一)
│ ├── 无溢出 → [S]补 即为正确结果
│ └── 有溢出 → 报告溢出异常
│
└── 输出结果四、例题与精解
例题1(基础巩固)
命题意图:考查补码减法的基本运算能力,验证"减法变加法"的掌握程度。
题目:设字长为8位,用补码计算 ,并验证结果。
审题分析:
- 已知:,,字长8位
- 求解: 的补码运算过程
- 关键:将减法转为加法,求
解题思路:
- 求 和
- 求
- 补码相加
- 验证结果
完整步骤:
第一步:,
第二步:,
第三步:求
- 取反:
- 加1:
第四步:补码相加
01000011 (+67的补码)
+ 11010101 (-43的补码)
----------
100011000舍弃最高位进位(模 运算),结果为 ✓()
方法反思:
- 补码加法中产生的进位直接丢弃,这是模运算的正常行为
- 不需要判断符号,不需要单独的减法器,这就是补码的核心优势
- 实际硬件中,ALU的 信号控制是否对 取反并置最低进位为1
例题2(中等提升)
命题意图:考查溢出的检测能力,要求使用多种方法判断溢出。
题目:设字长为8位,用补码计算 ,判断是否溢出,并分别用三种方法验证。
审题分析:
- 已知:,,字长8位
- 求解:是否溢出,以及三种验证方法
- 关键:8位补码表示范围为 ,,预期溢出
解题思路:
- 求两个正数的补码
- 补码相加
- 用三种方法分别判断
完整步骤:
第一步:编码
- ,
- ,
第二步:补码相加
01100100 (+100)
+ 00111000 (+56)
----------
10011100 (符号位为1!)结果 :符号位为1,表示负数(),但两个正数相加不可能得负数 → 溢出!
第三步:三种方法验证
方法一:单符号位法
- (正),(正),(负)
- → → 溢出 ✓
方法二:双符号位法
- 用双符号位:
- 双符号位为 → 正溢出(上溢) ✓
方法三:进位判断法
- 最高数值位(第6位)的进位:(第6位:,有进位)
- 符号位的进位:(符号位:,无进位)
- → 溢出 ✓
三种方法结论一致:溢出。
方法反思:
- 两个正数相加得到负数是溢出的典型信号
- 三种方法从不同角度捕捉溢出:符号异常(方法一)、符号位不一致(方法二)、进位不匹配(方法三)
- 硬件实现中,方法三(进位异或)最常用,因为它只需一个异或门
五、考情分析
| 分析维度 | 具体情况 |
|---|---|
| 近5年考查频次 | 高频,几乎每年至少出现1次,多以选择题或综合题子问形式出现 |
| 常见题型 | 选择题(补码加减运算结果判断、溢出判断)、综合题(与ALU数据通路结合) |
| 分值占比 | 2–6分/次 |
| 命题趋势 | 单纯计算题减少,更多与"数据通路""溢出标志位设置""标志寄存器"等硬件设计知识结合考查;有时与IEEE 754规格化过程中的溢出处理结合 |
注:考情数据基于大纲权重与通用命题规律推测,待真题分析子代理产出后校准。
六、易错点提醒
易错点1
- 错误表现:求 时只对数值位取反加1,符号位不变
- 错误原因:将"数值位取反"和"连同符号位一起取反"混淆
- 正确做法: 必须连同符号位一起取反,末位加1。符号位也要参与取反
易错点2
- 错误表现:补码加法产生进位后忘记丢弃(保留了第9位或第位)
- 错误原因:不理解模运算的含义——在 位补码系统中,结果自动对 取模
- 正确做法:最高位的进位直接丢弃,这不影响结果的正确性
易错点3
- 错误表现:认为"异号数相加也可能溢出"
- 错误原因:没有从数学上理解溢出的本质——异号数相加,结果的绝对值必然小于等于两个操作数中绝对值较大者,不会超出表示范围
- 正确做法:溢出只可能在同号数相加时发生。判断口诀:"同号相加才溢出"
易错点4
- 错误表现:双符号位法中,将 和 的含义记反(把 当作负溢出)
- 错误原因:缺乏直觉理解
- 正确做法: 表示"应该是正数但符号位变成了1"→ 正溢出(上溢); 表示"应该是负数但高位符号变成了0"→ 负溢出(下溢)。口诀:"01上溢,10下溢"
七、来源标注
- 依据2026考研统考大纲"计算机组成原理"第二章"数据的表示和运算"中"补码加减运算"和"溢出判断"相关内容
- 依据大学本科经典教材共识(唐朔飞《计算机组成原理》、白中英《计算机组成原理》)
本知识单元为CO-02"数据的表示和运算"系列第3单元,下一单元将讲解定点数乘除运算。