【问题标题】:I have a question regarding a signed binary calculation我有一个关于有符号二进制计算的问题
【发布时间】:2021-05-01 08:26:19
【问题描述】:

假设我有两个签名的二进制文件:

答:1100 乙:1000

我想从 A 中减去 B。

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

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

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

【问题讨论】:

    标签: binary logic signed


    【解决方案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

    【讨论】:

    • 这真的很有帮助,谢谢!所以我相信知道所有有符号位的范围就足以检测到溢出?
    • 不太清楚你的意思;但总的来说,如果“数学上精确的结果”适合目标大小,那么是的;不会有任何溢流/溢流。关键是计算数学上精确的结果“可能非常昂贵。(想象大位向量的乘法),因此已经开发了技术来确定是否存在溢出/下溢而不进行精确操作。我链接的论文有一个非常很好地总结了这些结果。
    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2022-12-13
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多