我正在使用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运算符应用于二进制,它会生成正确的数字。我的问题是,为什么需要应用这个?执行此操作后,如果第一位为零而不是一位,则必须确定其是否为负。这是什么意思呢?
答案 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。