我有一个关于带符号二进制计算的问题

问题描述

假设我有两个签名的二进制文件,它们是:

答:1100 乙:1000

我想从 A 中减去 B。

在 2 补充 B 之后,这将是: 1100 + 1000 = '1'0100

我认为这会导致溢出,因为 A 和 B 的符号为负而答案为正,但我的工作表答案键另有说明。

我的问题是,溢出是 1 还是答案键错误

解决方法

这个计算没有溢出。

  • 1100-4 十进制。
  • 1000-8 十进制。
  • -4 - (-8) = 4
  • 所以结果是0100,没有任何溢出。 (所有涉及的值都可以表示为有符号的 4 位,涵盖范围 -87(含)。

请注意,如果操作数具有相同的符号,则减法永远不会溢出(既不会上溢,也不会下溢),这里就是这种情况。

您似乎将加法末尾的额外位与确定是否发生溢出混淆了。一般来说,情况并非如此。对于每个操作,都有不同的规则来确定是否发生了上溢/下溢。这是一篇值得阅读的好论文,其中详细说明了位向量的有符号和无符号二进制算术发生下溢/上溢的确切条件:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/z3prefix.pdf