我知道这真的很傻但我对如何手工完成以下操作感到有些困惑:
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?
希望你能帮忙!
答案 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
要从符号幅度表示转换为二进制补码:
例如,要将-0.75的符号幅度表示转换为二进制补码:
Sign/magnitude: 10 110000
Invert: 11 001111
+1: 11 010000 -> two's complement
要反向转换,请反转过程(减1,然后反转)。