微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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。
因此,问题出现是因为您在计算过程中更改了位的解释。
这是任何逻辑表达式或电路都无法处理的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。