补码运算的溢出判别

版权声明:转载请注明出处,谢谢!!! https://blog.csdn.net/qhdhnbd110/article/details/82993503

        补码运算的溢出判别方式为双高位判别法,利用Cs表示符号位是否进位,利用Cp表示最高数值位是否进位。如果Cs ^ Cp的结果为真,则代表发生了溢出(运算结果大于0则为负溢出,小于0则为正溢出),否则运算结果正确。

for example

  1000 0011(补码为-3,原码为-125)        0000 0011(补码为3,原码为3)

+1100 1001(补码为-73,原码为-55)      +1100 1001(补码为-73,原码为-55)


10100 1100(补码为76,原码为76)        01100 1100(补码为-76,原码为-52)

Cs为1,Cp为0所以产生了负溢出。            Cs为0,Cp为0所以结果正确。

判断最高数值位是否进位:将两个数的符号位单独提出相加,如果结果与运算结果的符号位相同,则代表没有进位,Cp为0,否则Cp为1.

  0010 0011(补码为35,原码为35)            0010 0011(补码为35,原码为35)

+1110 1001(补码为-105,原码为-23)      +0110 1001(补码为105,原码为105)


10000 1100(补码为12,原码为12)          01000 1100(补码为-12,原码为-116)

Cs为1,Cp为1所以计算结果正确。             Cs为0,Cp为1所以产生了正溢出。

猜你喜欢

转载自blog.csdn.net/qhdhnbd110/article/details/82993503