在 2C 中添加多个二进制数后如何检测溢出?

问题描述

假设我想在 2 的补码中添加 4 个二进制数:a+b+c+d。我有一个电路可以一次将 2 个二进制数相加,并检测相应的和是否发生溢出(通过对最后一个进位位使用异或)。

2 的补码相加多个数时,有可能中间和溢出,而最终结果没有。例如:

4 + 5 + (-6) 用 4 位和 C2 表示:

0100 +
0101
====
1001 (-7 : overflow)

1001 +
1010
====
0011 (3,the correct result)

我的问题是:我怎么知道把4个n位的二进制数相加,最终结果是否溢出?有没有什么逻辑表达式或电路可以自动检测何时发生溢出?

解决方法

在你的例子中,0100 + 0101,用 4 位表示,给出了 1001 的硬件结果。
现在由您决定如何解释这些位。
如果将它们解释为 2 的补整数,则结果是错误的(十进制 -7,溢出)。
如果将它们解释为无符号整数,则结果是正确的(十进制 9)。
如果再加上1010,就得考虑如何解释这些位了。 无符号,十进制10,2的补码,十进制-6。
尽管如此,这取决于您如何解释结果。它是 0011 加上一个进位,因为 1001 + 1010 给出了 10011。
因此,问题出现是因为您在计算过程中更改了位的解释。
这是任何逻辑表达式或电路都无法处理的。