问题描述
答:1100 乙:1000
我想从 A 中减去 B。
在 2 补充 B 之后,这将是: 1100 + 1000 = '1'0100
我认为这会导致溢出,因为 A 和 B 的符号为负而答案为正,但我的工作表答案键另有说明。
我的问题是,溢出是 1 还是答案键错误?
解决方法
这个计算没有溢出。
-
1100
是-4
十进制。 -
1000
是-8
十进制。 -4 - (-8) = 4
- 所以结果是
0100
,没有任何溢出。 (所有涉及的值都可以表示为有符号的 4 位,涵盖范围-8
到7
(含)。
请注意,如果操作数具有相同的符号,则减法永远不会溢出(既不会上溢,也不会下溢),这里就是这种情况。
您似乎将加法末尾的额外位与确定是否发生溢出混淆了。一般来说,情况并非如此。对于每个操作,都有不同的规则来确定是否发生了上溢/下溢。这是一篇值得阅读的好论文,其中详细说明了位向量的有符号和无符号二进制算术发生下溢/上溢的确切条件:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/z3prefix.pdf