1

所以当我读这本书时,它说当添加不同的符号和减去相同的符号时不会发生溢出。但是当我这样做时我有疑问:185 - 122 我将 122 的二进制转换为 2s 补码并进行了加法,这是不同的符号:185+(-122) 当我将它们加在一起时,我得到符号位溢出到100111111。但是如果我把左边的MSB剪掉,那就是正确的答案。是溢出吗?

4

1 回答 1

2

不,它不是溢出 -1's在 MSB 中添加 2 导致的溢出必须被丢弃。来自维基百科

为了获得二进制数的二进制补码,通过使用按位非运算将位反转或“翻转”;然后将 1 的值添加到结果值中,忽略取 0 的二进制补码时发生的溢出。

所以在你的例子中

185 10111001
122 01111010 -

取 122 的 2 的补码(一个补码 +1)

01111010 => 10000110

添加:

10111001 185
10000110 +(-122)
--------
00111111 (63)

=63

overflow忽略。

但是,在执行 2 的补码后检测溢出有一些规则:

  • 如果两个正数相加得出负数
  • 如果两个负数之和得出正结果
于 2014-02-23T07:01:24.230 回答