因此,当我读到这本书时,它说当添加不同的符号和相同符号的减法时不会发生溢出。 但是当我这样做时,我有疑问:185 - 122 我将122的二进制转换为2s补码并进行了加法,这是不同的符号: 185 +( - 122)当我将它们加在一起时,我得到符号位溢出到100111111.但是如果我切断了左边的MSB,这是正确的答案。这是溢出吗?
答案 0 :(得分:2)
不,它不溢出 - 必须丢弃在MSB中添加2 1's
导致的溢出。来自Wikipedia
要获得二进制数的二进制补码,通过使用按位NOT运算来反转或“翻转”这些位;然后将值1添加到结果值中,忽略在取两个补码0时发生的溢出。
所以在你的例子中
185 10111001
122 01111010 -
取2的补码122(一个补码+1)
01111010 => 10000110
添加:
10111001 185
10000110 +(-122)
--------
00111111 (63)
= 63
忽略overflow
。
然而,在进行2的补码后,有一些检测溢出的规则: