如果我有
0010 1101
0110 1111
____ +
1001 1100
是否溢出?因为第一个数字的符号变成1,1代表负数?我的二进制很弱。
如果添加怎么办
1111 1111
1111 1111
___ +
1111 1110
结转 1 不是溢出?因为1111 1110代表-2?
感谢您的帮助!
如果您使用的是没有符号的普通二进制表示,则它不是溢出
0010 1101->45
0110 1111->111
45+111 = 156。你可以在 [0, 255] 范围内操作,那么它不是溢出。
如果您使用二进制补码,则范围为 -128 到 127,只有一种表示 0。然后这是溢出,因为 156 超出范围 [-128, 127]
您不能只使用第一位来表示符号,因为这样您就有 10000000 和 00000000 代表 0 和 -0。您应该使用二进制补码来处理负数。
这取决于你如何对待你的价值——它是签名的还是未签名的。如果它是无符号二进制,则不会溢出。如果签名为 1,则确实发生了溢出。
我想我们谈论的是有符号值,基本上,溢出是当值由于二进制算术运算而改变其符号时,结果超出了最大-最小范围。