溢出-算术移位的溢出
补码定点数加减运算溢出的三种判断方法
首先这里提前说明,为了方便解释,下面的方法只涉及加法,即使是减法运算,也化成加法运算
- 单符号法
只有当两个同号的操作数相加才可能发生溢出;运算结果与两个操作数异号,则发生溢出 - 双符号法
00-正;11-负;01-正溢出;10-负溢出 - 单符号与进位联合判断
[x]补 = S_0 | X_0 X_1 X_2 …… X_N
S_0 为符号位, X_0为信息为最高位, s为符号位进位, x为最高位进位
根据运算结果,当s ≠ x 时,溢出
算术移位的溢出
在二进制表示中,乘2表示左移1位;除2表示右移一位
首先算术右移时不会发生溢出的
算术左移时:X = S_0 | X_0 X_1 X_2 …… X_N
X为原码表示时:最高位为1,左移一位溢出;
X为反码表示时,最高位为0,左移一位溢出;
X为补码表示时,符号位≠最高位,左移一位溢出;
这里解释一下补码情况
X = S_0 | X_0 X_1 X_2 …… X_N
扩展成双符号表示 X = S_0 S_0 | X_0 X_1 X_2 …… X_N
左移一位 S_0 X_0 | X_1 X_2 …… X_N X_N+1
当S_0≠X_0,溢出