2010-04-27 236 views
3

二进制值是2s补码形式。二进制加法。它溢出了吗?

如果我要添加110001(-15)和101110(-18),并且答案必须存储在一个6位整数中,这是下溢/溢出。

+3

这是一个功课题吗? – Amber 2010-04-27 23:39:37

+0

是的。但我解决了它,得到了十进制的答案-33。由于6位二进制补码整数的下限是-32,根据我的说法,这是一个下溢,但根据我的教授。解决方案笔记,其不是。我只想确认一下。 – xbonez 2010-04-27 23:41:56

回答

2

这是溢出,你的教授是正确的。您正在存储更多可以保留在分配空间中的位(即使这些位表示的数字是负数)。

下溢是当位通过大数学移位而变为零时。在定点数学中很常见。将一个非常小的数字除以非常大的数字,并且您经常会得到0.这是下溢。

+0

+1这就是我要说的。下溢是一个不同的概念,更常见于浮点数学。 – 2010-04-27 23:48:25

0

编辑:我刚刚意识到-33是6位过大,所以结果不是-33而是+31,因此它绝对是一个溢出 :)

两数相加并获得正确的结果,如果绝对不是溢出。溢出的一个例子是添加两个负数,并得到一个正数(反之亦然)。

例如,如果添加两个正数0x7fffffff和0x00000001,则会得到负数0x80000000,这肯定是错误的,因此会发生溢出。

也许你会把溢出与携带混淆?

1

有一个很好的例子讨论了添加两个寄存器的内容-70和-90并将它存储在第三个寄存器中。

Let's assume R1[8 bits] = -70 R2[8 bits] = -90 Result[9 bits] = -160, an extra bit for overflow.

这个例子下面参考1 overflow_signed_detection页讨论。 通过本页讨论的规则,该示例可以缩放为任意两个带符号的十进制数字。