1
所以当我读了这本书,它说,当添加不同的符号和减去相同的符号时不会发生溢出。 但我有问题,当我这样做时:185 - 122 我把122的二进制转换为2s补码并做了加法,这是不同的符号: 185 +( - 122)当我将它们加在一起时,位溢出到100111111.但是,如果我切断左边的MSB,这是正确的答案。它是溢出吗?这是一个溢出算术计算吗?
所以当我读了这本书,它说,当添加不同的符号和减去相同的符号时不会发生溢出。 但我有问题,当我这样做时:185 - 122 我把122的二进制转换为2s补码并做了加法,这是不同的符号: 185 +( - 122)当我将它们加在一起时,位溢出到100111111.但是,如果我切断左边的MSB,这是正确的答案。它是溢出吗?这是一个溢出算术计算吗?
不,它不会溢出 - 在MSB中添加2 1's
产生的溢出必须被丢弃。从Wikipedia
为了得到二进制数的二进制补码,通过使用按位NOT操作来反转位或“翻转”位;然后为1的值被添加到所得到的值,忽略服用0
所以二的补码在你的例子
185 10111001
122 01111010 -
服用2的122的补体时发生的溢流(One的补充+1)
01111010 => 10000110
添加:
10111001 185
10000110 +(-122)
--------
00111111 (63)
= 63
overflow
被忽略。
但是也有做2的补后检测溢出的规则:
@Rozen - 这里有一些进一步的答案http://stackoverflow.com/q/6853524/314291为什么CPU/ALU在内部使用2的补码。很明显,作为最终用户,我们只需要使用'SUB'来扣除英特尔) – StuartLC