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