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