首页 > 解决方案 > 在2C中添加多个二进制数后如何检测溢出?

问题描述

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

在 2 的补码中添加多个数字时,中间和可能会溢出,而最终结果不会。例如:

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

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

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

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

标签: binarybooleanadditiondigitalboolean-algebra

解决方案


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


推荐阅读