二进制加法。它会溢出吗?

3

二进制数以2的补码形式表示。

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


是的,没错。但我已经解决了,得到了一个十进制的答案为-33。由于6位2s补码整数的下限为-32,所以我认为这是一种下溢情况,但根据我的教授解决方案笔记,它不是。我只是想确认一下。 - Ayush
3个回答

2

这是溢出,你的教授说得对。你存储的比特数超过了分配空间的容量(即使比特所代表的数字是负数)。

下溢是指在大型计算中通过移位将比特清零。这在定点数学中非常普遍。将一个非常小的数字除以一个非常大的数字,通常会得到0。这就是下溢。


+1 这正是我想说的。下溢是一个不同的概念,更常与浮点数学相关。 - Andy White

1

有一个很好的例子讨论了如何将两个内容为-70和-90的寄存器相加,并将其存储在第三个寄存器中。

假设 R1 [8位] = -70 R2 [8位] = -90 Result [9位] = -160,多出一位用于溢出检测。

这个例子在下面的参考1的溢出检测页面上进行了讨论。 根据本页讨论的规则,该示例可以扩展到任意两个有符号十进制数。


0

编辑:我刚意识到-33对于6位来说太大了,所以结果不是-33而是+31,因此这绝对是溢出 :)

如果两个数相加得到正确的结果,那么肯定不是溢出。溢出的一个例子是将两个负数相加并得到正数(或反之亦然)。

例如,如果您将两个正数0x7fffffff和0x00000001相加,则会得到负数0x80000000,这显然是错误的,因此是溢出。

也许您将溢出与进位混淆了?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接