二进制补码运算溢出判断
补码运算的溢出判别方式为双高位判别法,利用Cs表示符号位是否进位,利用Cp表示最高数值位是否进位。如果Cs ^ Cp的结果为真,则代表发生了溢出(运算结果大于0则为负溢出,小于0则为正溢出),否则运算结果正确。
例如:
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所以结果正确。
扩展资料
二进制补码运算规则:
1、正数:原码=反码=补码
2、负数:原码(第一位是1符号位)=反码(除第一位符号位外,其它按位取反)=补码(反码+1)
3、0:原码=反码=补码=0
举例:
1、15-5=15+(-5)=10
原码:
15:0000 1111
-5:1000 0101
反码:
15:0000 1111
-5:1111 1010
补码:
15:0000 1111
-5:1111 1011
参考资料来源:
1.由人进行计算,并判断:正+正=负、负+负=正、...,这就是溢出。
2.由CPU进行计算,由人观察标志位:OV=1,就是溢出。
3.由CPU进行计算,并给出溢出标志位:C7异或C6,为1,就令OV=1。
楼主问的是那种方法?
我问的是第一种方法,麻烦解释一下哈😁
没问题了,谢谢。我看错选项了。。
发生溢出,是数据过大,超出了补码所能表示的范围。
具体表现,就是:符号位错误。
可能发生溢出的算法有:正数+正数、负+负。
此外还有:正-负、负-正。
如果结果的符号,不符合正常的规律,就是溢出了。
CPU 计算后,会自动判断,如果溢出,将置位 OF。
图中的四个选项,只有 (d)B-C,才有可能溢出。