【问题标题】:Binary floating point Subtraction二进制浮点减法
【发布时间】:2012-09-25 00:35:27
【问题描述】:

我正在解决一个二进制减法,但卡在了一个点上。我无法理解如何从较小的数字中减去较大的数字。

我的操作数是 0.111000*2^-3 和 1.0000*2^-3。

我很容易减去小数部分,但是当来到 MSB 时,我不知道该怎么做。我应该从哪里借来执行操作。我知道从 0 中减去 1 需要借位,它会将符号位变为负数。但在这里,存储并不受到关注。我的问题在于操作本身。谁能解释一下结果以及如何执行它??

谢谢

【问题讨论】:

  • 需要询问几件事以确保每个人都在正确的页面上。在谈论数学时,binary 通常指的是整数值,但听起来你在谈论浮点数。如果是的话,有几种不同版本的浮点数,IEEE 754 是最常见的。
  • @Jeremy J Starcher,我说的是 IEEE 754 标准。事实上,我原来的问题也是减去 2 个双精度数。但为了更简单,我只给出了前 7 位。无论如何,其余的两个数字都是 0
  • 在这种情况下,我将向您介绍我在 Stack Overflow 上最喜欢的工具——搜索选项。这可能会对您有所帮助:stackoverflow.com/questions/591046/…

标签: binary-data subtraction


【解决方案1】:

很晚了,但是有同样的问题,所以把这个放在这里给其他人,有同样的问题。

如果你的问题只出在分数部分,你可以试试这个方法:

  1.000
- 0.111
-------

第一步:将两个二进制数的符号位相加,这样就可以相加了。

 0 1.000
 1 0.111
 -------  +
 1 1.111

现在反转并加一以将 2 的补码转换为符号大小:

1 1.111 -> 0.001

【讨论】:

    【解决方案2】:

    这是一个很好的例子,可以帮助你:

    http://sandbox.mc.edu/~bennet/cs110/pm/sub.html

    如果以编程方式执行此操作,您可以作弊并在执行减法之前查看哪个更大(我就是这样做的)。

    【讨论】:

    • 但是从您提供的链接中,没有示例显示从较小的数字中减去较大的数字。你能解释一下它是如何发生的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    相关资源
    最近更新 更多