【问题标题】:Subtracting fixed point binary numbers?减去定点二进制数?
【发布时间】:2012-12-22 05:32:10
【问题描述】:

大家好,

我知道这真的很傻,但我对如何手动执行以下操作有点困惑:

0.25-0.5?或任何类似的问题

另外,当涉及到定点有符号数时,如何减去它们?

假设我选择我的 MSB 为符号,8 位数字中的第 7 位为 1,而位 6-0 是小数部分,如下所示:

[符号][2^0][2^-1][2^-2][2^-3][2^-4][2^-5][2^-6]

例如:01.100000 是十进制的 1.5。

对齐小数点时很容易添加 1+0.25:

01.000000 +00.010000 =01.010000 = 1.25(十进制)

但是我该怎么做 0.25-1?还是-0.25-1?

希望你能帮忙!

【问题讨论】:

  • 你为什么要问 2 个关于定点算术的问题?为什么不把它合并成 1 呢?

标签: fixed-point


【解决方案1】:

使用符号幅度表示,就像您在此处所做的那样,会使事情变得非常复杂(并且会让您背负表示“负零”的位模式,与全零“正常零”分开)。这当然是一种可行的表示,但是,正如您所发现的,使用它要复杂得多。

使用二进制补码表示,其中最高位表示两倍于下一个最高位幅度的负值(在这种情况下,-2^1)将极大地简化问题,因为它允许您执行加法和减法就像两个数字都没有符号一样。使用这样的表示,例如:

 0.25 = 00 010000
-1.00 = 11 000000
      -----------
        11 010000 = -0.75

-0.25 = 11 110000
-1.00 = 11 000000
      -----------
        10 110000 = -1.25

将符号幅度表示转换为二进制补码:

  • 如果该数字是正数,请不要理会它。
  • 如果数字为负数,则将除符号位以外的所有位取反并加 1(使用无符号加法)。

例如,要将 -0.75 的符号幅度表示转换为二进制补码:

Sign/magnitude: 10 110000
        Invert: 11 001111
            +1: 11 010000 -> two's complement

要向相反方向转换,请反转过程(减去 1,然后反转)。

【讨论】:

  • 嗯...好吧,我正在为我们在大学设置的作业执行此操作,因此我必须使用如上所示的符号位。但现在我有点困惑。 11 010000 = -0.75 怎么算?不应该是-1.25吗?和 10 110000 = -0.75?
  • 我可以先取带符号位形式的数字吗?然后通过将符号设置为 0 来删除符号,然后做二进制的恭维来更改数字?即:-0.25 = 10 010000 删除符号 0.25 = 00 010000 做两个恭维:-0.25 现在是:11110000
  • 11.010000 = -2 + 1 + 0.25 = -0.75。 10.110000 = -2 + 0.5 + 0.25 = -1.25。
  • 对不起!!仍然困惑大声笑 MSB 代表标志对吗?所以:11.010000 - 2^0 + 2^(-2) = -1.25 如果我假设 MSB 不是符号位,那么:2^1+2^0 + 2^-2 = 0.75(你从哪里得到' -'来自?)还有一个额外的问题是,在我的分配中,我只有 16 位,其中第 16 位是符号位,第 15 位 = 2^0 = 1。其他 13 位表示如下所示的分数:[SIGN ]{2^0]{2^-1]{2^-2]...{2^-14] 使用这种格式我该怎么说 0.25-1 等?
  • 啊.. 我也想通了你在上面添加的内容(花了很长时间玩数字游戏..)。所以在我得到两者的恭维表示后,我可以将它添加到正数中,它应该可以解决吗?待办事项:1-0.75:01 000000 +11 010000 --------- 00 010000
猜你喜欢
  • 1970-01-01
  • 2017-02-13
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
相关资源
最近更新 更多