利用双符号数进行浮点数补码加减运算的过程中,一般会碰到如下几种情况:
1. 正数加正数:
如00,1111➕00,1000,此时的运算结果就为01,0111。
很明显,这发生了正溢出,因为在数值位只有4位,能表示的最大数值为1111,而运算结果显然超出了该范围,于是产生了像符号位的进位,造成上溢出。
2. 负数加负数:
如11,1111➕11,1000,此时的运算结果就为11,0111。
显然,这没有发生了溢出,其原因是在负数补码中,高位的1相当于原码的0,于是如果两个操作数的数值位最高位都是1的话,是一定不会引起操作数溢出的,与正数两个最高位为0相加,不会发生溢出是一样的。如果,有其中一个为0的话,如果次高位传来进位,依旧可以保证对符号位的进位,也就是保证符号位不会发生变化,从而避免了溢出。
所以在负数补码的运算当中,如果数值位最终产生了进位,则表明不会溢出,如果没有,则表明会溢出。
3. 正数和负数的运算不会引起溢出,此处不再赘述。