补码运算的溢出判别方式为双高位判别法,利用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所以产生了正溢出。