第1个回答 2006-10-07
补充:原码、反码中0都有两个,而补码中却只有一个,原因就是它把其中一个转为最小的-128(10000000),而原码中的10000000表示的是00000000,不能按常规来解释原码的10000000的补码,如果按常规来讲,就是10000000(-0变成了-128)。
来看下关于1000000的运算(默认为补码)
10000000 + 00000001 = 10000001 = 11111111(原)
(-128 + 1 = -127)
01111111 + 00000001 = 10000000
(127 + 1 = -128)(溢出)(这里没有转成原码,因为转后就是-0)
楼主说11111111表示-127,看来用的是原码。那么原码中相反符号数之间的加法做的是减法,所以结果是11111110(-126),计算机内是以补码形式存在的,所以11111111表示-1,加1的结果就是00000000。
而对于10000000,楼主的意思好像是原码,也就是原码中的0,它的补码也同样是0。求补得到的结果也是一样的。
第2个回答 2020-06-07
+13+(-10)是溢出
要运算的结果大于数值设备所能表示数的范围,就会产生溢出.
如何判断补码溢出:
可以通过最高位与次高位进位来判断:若最高数值位向符号位的进位值与符号位产生的进位输出值不相同,则表明加减运算产生了溢出.
溢出现象应当作一种故障来处理,因为它使结果数发生错误.异号两数相加时,实际是两数的绝对值相减,不可能产生溢出,但有可能出现正常进位;同号两数相加时,实际上是两数的绝对值相加,既可能产生溢出,也可能出现正常进位.由于补码运算存在符号位进位自然丢失而运算结果正确的问题,因此,应区分补码的溢出与正常进位.
只有有符号数存在溢出,无符号数不存在溢出~