二进制数以2的补码形式表示。
如果我要将110001(-15)和101110(-18)相加,并且答案必须存储在一个6位整数中,这是否会导致下溢/上溢。
这是溢出,你的教授说得对。你存储的比特数超过了分配空间的容量(即使比特所代表的数字是负数)。
下溢是指在大型计算中通过移位将比特清零。这在定点数学中非常普遍。将一个非常小的数字除以一个非常大的数字,通常会得到0。这就是下溢。
有一个很好的例子讨论了如何将两个内容为-70和-90的寄存器相加,并将其存储在第三个寄存器中。
假设
R1 [8位] = -70
R2 [8位] = -90
Result [9位] = -160,多出一位用于溢出检测。
这个例子在下面的参考1的溢出检测页面上进行了讨论。 根据本页讨论的规则,该示例可以扩展到任意两个有符号十进制数。
编辑:我刚意识到-33对于6位来说太大了,所以结果不是-33而是+31,因此这绝对是溢出 :)
如果两个数相加得到正确的结果,那么肯定不是溢出。溢出的一个例子是将两个负数相加并得到正数(或反之亦然)。
例如,如果您将两个正数0x7fffffff和0x00000001相加,则会得到负数0x80000000,这显然是错误的,因此是溢出。
也许您将溢出与进位混淆了?