我想知道如何将定点运算中的二进制补码转换为十进制数。
所以我们假设我们在二进制补码中得到了这个定点运算:11001011
带位编号,小数点后面有2
个位置,并希望将其形成十进制数。
我们已经知道小数将是负数,因为第一位是1
。
2
位置,因此我们有110010 11
。
将其从两个补码转换为普通形式(sub
1
,invert
):
110010 10
(我在此处1
)
001101 01
(我倒在这里)
001101
为13
01
为1
所以最后我们到了-13.1
。这是正确的还是甚至没有办法转换它?
答案 0 :(得分:1)
最简单的方法是将整个值转换为整数(最初忽略固定点),然后缩放结果。
因此,对于您的固定点编号为6.2的示例:110010 10
:
转换为整数:
11001010 = -54
除以比例因子= 2 ^ 2:
-54 / 4 = -13.5
请注意,小数部分始终是无符号的。 (您现在可能会看到10
会为小数部分提供+ 0.5
,即00
= 0.0
,01
= +0.25
, 10 = +0.5
,11 = +0.75
。)
答案 1 :(得分:0)
一个小音符(但对于理解您的问题非常重要)-当您说“小数点”时,您真的表示小数吗?还是“二进制”点。 意思是,如果是小数点,则可以在转换为小数后将其定位,以查看该点右边应保留多少小数位,但是如果您表示二进制点,则意味着二进制表示多少位表示小数部分。 在您的示例中,看来您的意思是二进制点,然后整数部分是001101(bin)= 13(dec),小数部分是0.01(bin)= 0.25(dec),因为第一个位在右边该点代表1/2,第二个代表1/4,依此类推,然后将整个对象求反。 总结果为-13.25