【问题标题】:Binary Addition. Is it overflow?二进制加法。是否溢出?
【发布时间】:2010-04-27 23:37:34
【问题描述】:

二进制值采用 2s 补码形式。

如果我要添加 110001 (-15) 和 101110 (-18),并且答案必须存储在 6 位整数中,这是下溢/上溢吗?

【问题讨论】:

  • 是的。但我解决了它,得到了十进制的答案 -33。由于 6 位 2s 补码整数的下限是 -32,因此在我看来这是一个下溢,但根据我的教授。解决方案说明,它不是。我只是想确认一下。

标签: binary overflow underflow


【解决方案1】:

这是溢出,你的教授是正确的。您正在存储更多可以保存在分配空间中的位(即使位表示的数字是负数。)

下溢是指通过在大数学上移位而将位清零。在定点数学中很常见。用一个非常小的数除以一个非常大的数,你经常会得到 0。这就是下溢。

【讨论】:

  • +1 这就是我要说的。下溢是一个不同的概念,通常与浮点数学有关。
【解决方案2】:

有一个很好的例子讨论了添加两个内容为 -70 和 -90 的寄存器并将其存储在第三个寄存器中。

Let's assume R1[8 bits] = -70 R2[8 bits] = -90 Result[9 bits] = -160, an extra bit for overflow.

下面的ref 1 上的overflow_signed_detection 页面讨论了这个例子。 使用本页讨论的规则,该示例可以缩放为任意两个有符号十进制数。

【讨论】:

    【解决方案3】:

    编辑:我刚刚意识到 -33 对于 6 位来说太大了,所以结果不是 -33 而是 +31,因此它肯定是溢出 :)

    如果绝对不是溢出,则添加两个数字并获得正确的结果。溢出的一个例子是将两个负数相加并得到一个正数作为结果(反之亦然)。

    例如,如果将两个正数 0x7fffffff 和 0x00000001 相加,则得到负数 0x80000000,这肯定是错误的,因此会溢出。

    也许您将溢出与进位混淆了?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-31
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 2023-02-13
      • 1970-01-01
      相关资源
      最近更新 更多