1

大家好,

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

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?

希望你能帮忙!

4

1 回答 1

3

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

使用二进制补码表示,其中最高位表示两倍于下一个最高位幅度的负值(在这种情况下,-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,然后反转)。

于 2012-12-22T05:39:22.617 回答