Appearance
补码加减运算与溢出检测
考情分析
补码加减运算与溢出判断在 408 中属于高频考点,几乎每年都以选择题或大题形式出现。三种溢出判断方法(单符号位法、双符号位法/变形补码、进位法)都要掌握。
补码加减法规则
补码加法
即两数补码直接相加,符号位参与运算,最高位(符号位)的进位丢弃。
补码减法
减法转化为加法,关键是求
求补操作的快速方法:从最低位开始,找到第一个 1,保持该位及其右侧所有位不变,左侧所有位(包括符号位)取反。
例:
最低位的 1 在第 3 位(从右数),保留右侧 100,左侧 10110 → 01001
溢出的本质
溢出指运算结果超出了机器数所能表示的范围。
对于
- 正溢出(上溢):结果
,两个正数相加但结果变成负数 - 负溢出(下溢):结果
,两个负数相加但结果变成正数
TIP
同符号数相加才可能溢出,异符号数相加不会溢出。
三种溢出判断方法
方法一:单符号位法
观察操作数符号位和结果符号位:
用语言描述:
- 两个正数相加,结果为负 → 正溢出
- 两个负数相加,结果为正 → 负溢出
- 其他情况不溢出
| 溢出判断 | |||
|---|---|---|---|
| 0 | 0 | 0 | 无溢出 |
| 0 | 0 | 1 | 正溢出 |
| 0 | 1 | 0 | 无溢出 |
| 0 | 1 | 1 | 无溢出 |
| 1 | 0 | 0 | 无溢出 |
| 1 | 0 | 1 | 无溢出 |
| 1 | 1 | 0 | 负溢出 |
| 1 | 1 | 1 | 无溢出 |
方法二:双符号位法(变形补码/模 4 补码)
将每个操作数扩展为双符号位:
- 正数:补两个 0,如
→ - 负数:补两个 1,如
→
运算后观察结果的两位符号位:
| 双符号位结果 | 含义 |
|---|---|
00 | 结果为正,无溢出 |
11 | 结果为负,无溢出 |
01 | 正溢出(结果应为正但超出范围) |
10 | 负溢出(结果应为负但超出范围) |
口诀:双符号位相同 → 无溢出;不同 → 溢出(高位符号位是正确符号)。
方法三:进位法
观察加法器最高数值位向符号位的进位
(XOR = 1)→ 溢出 → 无溢出
交互可视化
典型例题
例题 1:8 位补码,计算
01100100 (+100)
+ 00111000 (+56)
----------
10011100结果符号位为 1,但两个正数相加结果为负 → 正溢出。
双符号位验证(8位字长扩展为9位:2位符号 + 7位数值):
001100100
+ 000111000
----------
010011100双符号位为 01 → 确认正溢出。
例题 2:8 位补码,计算
真值:
10110101 (-75)
+ 11001011 (-53)
----------
1 10000000 进位丢弃结果为 10000000 =
进位法:
例题 3:用双符号位法计算
10111010,双符号位扩展为9位:11011101010110000,双符号位扩展为9位:110110000
110111010
+ 110110000
----------
1 101101010 最高进位丢弃双符号位为 10 → 负溢出(
考点清单
- [ ]
,符号位参与运算 - [ ] 补码减法:
,对 连符号位一起求补 - [ ] 同符号数相加才可能溢出,异符号不溢出
- [ ] 单符号位法:看操作数符号与结果符号
- [ ] 双符号位法:
00/11无溢出,01正溢出,10负溢出 - [ ] 进位法:
- [ ] 快速求补:找最低位 1,左侧全部取反(含符号位)