负浮点到二进制转换

时间:2012-11-18 01:03:27

标签: floating-point binary hex base-conversion ar.drone

我正在使用AR Drone SDK对无人机进行编程。在文档中,是这样说的:

  

数字-0.8作为32位字存储在存储器中,其值为   BF4CCCCD(16),符合IEEE-754格式。这个32位字可以   被认为是持有32位整数值-1085485875(10)。所以   要发送的命令是AT * PCMD = xx,xx,-1085485875,xx,xx。

对于二进制转换的十进制表示,它们如何到达-1085485875?这对我来说没有意义。使用此页面:http://kipirvine.com/asm/workbook/floating_tut.htm和此页面:http://www.madirish.net/240以及此页http://cs.furman.edu/digitaldomain/more/ch6/dec_frac_to_bin.htm,这就是我提出的内容:

decimal value = -0.8

binary value of decimal (-0.8) = -.11001100110011001100110

biased exponent (move above decimal over once to right) = 127 - 1 = 126 = 01111110

sign, exponent, mantissa (mantissa: drop off the 1 to left of decimal point, pad to 23) = 1 01111110 10011001100110011001100

10111111010011001100110011001100 = 3209481420 (10) BF4CCCCC (16).

文档说它的-1085485875(10)和BF4CCCCD(16)

我在这里做错了什么???

感谢。

编辑:

由于我正在使用node / js编写AR DRONE应用程序,如果我使用这些node.js函数:

var buffer = new Buffer(4);
buffer.writeFloatBE(-0.8, 0);
return -~parseInt(buffer.toString('hex'), 16) - 1;

根据文档我得到了正确的结果。当我把它写出来时,我只是不明白我做错了什么。我想了解发生了什么。任何帮助都非常感谢。

感谢。

更新:

所以,我已经想出(从上面的javascript代码中)如果我先将二进制NOT运算符应用于二进制,它会生成正确的数字。我的问题是,为什么需要应用这个?执行此操作后,如果第一位为零而不是一位,则必须确定其是否为负。这是什么意思呢?

1 个答案:

答案 0 :(得分:0)

-0.8 = -0.110011001100110011001100 11001100110011001100110011001100110011 ...(空间位于位24和25之间 - 位25是舍入位)。这轮为24位,为0.110011001100110011001101。以下是IEEE单精度格式的外观:

sign  biased exponent    trailing 23-bits of mantissa
 \/        \/                      \/
 1      01111110         10011001100110011001101

那是10111111010011001100110011001101,或十六进制的BF4CCCCD。如果您将其视为二进制补码整数,则为-1085485875。