【发布时间】:2010-04-27 23:37:34
【问题描述】:
二进制值采用 2s 补码形式。
如果我要添加 110001 (-15) 和 101110 (-18),并且答案必须存储在 6 位整数中,这是下溢/上溢吗?
【问题讨论】:
-
是的。但我解决了它,得到了十进制的答案 -33。由于 6 位 2s 补码整数的下限是 -32,因此在我看来这是一个下溢,但根据我的教授。解决方案说明,它不是。我只是想确认一下。
二进制值采用 2s 补码形式。
如果我要添加 110001 (-15) 和 101110 (-18),并且答案必须存储在 6 位整数中,这是下溢/上溢吗?
【问题讨论】:
这是溢出,你的教授是正确的。您正在存储更多可以保存在分配空间中的位(即使位表示的数字是负数。)
下溢是指通过在大数学上移位而将位清零。在定点数学中很常见。用一个非常小的数除以一个非常大的数,你经常会得到 0。这就是下溢。
【讨论】:
有一个很好的例子讨论了添加两个内容为 -70 和 -90 的寄存器并将其存储在第三个寄存器中。
Let's assume
R1[8 bits] = -70
R2[8 bits] = -90
Result[9 bits] = -160, an extra bit for overflow.
下面的ref 1 上的overflow_signed_detection 页面讨论了这个例子。 使用本页讨论的规则,该示例可以缩放为任意两个有符号十进制数。
【讨论】:
编辑:我刚刚意识到 -33 对于 6 位来说太大了,所以结果不是 -33 而是 +31,因此它肯定是溢出 :)
如果绝对不是溢出,则添加两个数字并获得正确的结果。溢出的一个例子是将两个负数相加并得到一个正数作为结果(反之亦然)。
例如,如果将两个正数 0x7fffffff 和 0x00000001 相加,则得到负数 0x80000000,这肯定是错误的,因此会溢出。
也许您将溢出与进位混淆了?
【讨论】: