减去定点二进制数?

时间:2012-12-22 05:32:10

标签: fixed-point

ello guys,

我知道这真的很傻但我对如何手工完成以下​​操作感到有些困惑:

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

另外,对于定点有符号数字,你如何减去它们?

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

[SIGN] [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?

希望你能帮忙!

1 个答案:

答案 0 :(得分: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,然后反转)。