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