补码如何处理溢出现象_补码相加后溢出了怎么办

(3) 2024-06-08 09:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
补码如何处理溢出现象_补码相加后溢出了怎么办,希望能够帮助你!!!。

int :-32768——+32767
最高位为符号位:0代表正,1代表负
正数:补码,反码,原码相同
负数:补码是正数取反加一

32767 的编码01111
取反为00000
再加1得到-32767的编码:
00001
-32768比32767还少1:自然就是:
00000

在原码运算时,首先要把符号与数值分开。例如两数相加,先要判断两数的符号,如果同号,可以做加法,如果异号,实际要做减法,减后的差作为两数之和,和数的符号与绝对值较大的数的符号相同。两数相减也是一样,首先要判断两数符号,然后决定是相加还是相减,还要根据两数的大小与符号决定两数之差的符号。

如果是补码运算则不存在符号与数值分开的问题。在补码运算时,把符号位也看成数值,一起参加运算,而且加法运算就一定是相加,减法运算就一定是相减,因此在计算机中对带符号的数进行加减时,最好使用补码。

补码的运算规则是:X + Y = (X + Y)

在y - x算式中,最高位发生的进(借)位,若运算结果并未超出补码的记数范围,这时的进(借)位被视为自然丢弃。计算机在运算中,这种自然丢弃并不影响结果的正确性。

如果计算结果超过补码所允许的表示范围,则其进位称之为溢出。溢出和自然丢弃是两种不同的概念。判别属于哪一种,则要看计算结果最高位与次高位的进位情况,如果最高位和次高位同时产生进位,即所谓双进位,则这种进位属于允许的自然丢弃。如果只有最高位或者只有次高位产生进位,即只有单进位,则这种进位属于溢出,溢出表示其数值超出计算机字长所能表示的范围,运算结果必然是错误的,因而也是不允许的。(另外还有采用双符号位时的判断方法)

溢出的概念主要是指带符号二进制数进行加减运算时可能产生的一种结果。对于无符号数,最高位不是符号位,不采用溢出这个概念(标准规定没有溢出,也就是说,其溢出后的数值是可以确定的,另外也不会有什么被标记的溢出错误)。

当两个无符号数相减时,不允许用小的数去减大的数,因为小减大它的差一定是负数,无符号数的前提是没有符号,显然也不允许有负数,如果这样做,减的结果也必然是错误的。

转载自:补码运算-溢出和自然丢弃

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复