我正在使用AR Drone SDK编程无人机。在该文档中,是这样说:负浮点到二进制转换
数-0.8被存储在存储器中作为其值是 BF4CCCCD(16)32位字,根据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)
上午什么我在这里做错了吗?
谢谢。
编辑:
因为我写与节点/ JS的AR无人机的应用程序,如果我使用这些功能的Node.js:
var buffer = new Buffer(4);
buffer.writeFloatBE(-0.8, 0);
return -~parseInt(buffer.toString('hex'), 16) - 1;
我得到正确的结果按文档。当我长时间写出来时,我只是不明白自己做错了什么。我想了解发生了什么事。任何帮助真的很感激。
谢谢。
UPDATE:
所以,我已经想通了(从上面的javascript代码),如果我申请的按位NOT操作者首先为二进制,然后它产生正确的号码。我的问题是,为什么这需要应用?做完这些之后,如果第一位是零而不是一个,你将不得不确定它的否定。这是什么意思?
尝试舍入尾数而不是截断它,并尝试将结果解释为二进制补码数。 – Bovinedragon
@Bovinedragon我不明白当你说我正在截尾数,我在哪里做这个?你能否给我多一点关于将结果解释为二进制补码的信息? .8变成了1100的重复二进制模式,所以我重复它到22个位置,但是因为我从小数点左边移除了1,所以我在最后用另一个0填充它。我在哪里截断它?我只是把符号,指数和尾数放在一起,那最后的结果是正确的?至于这些数字如何存储在内存中? –
我只是不明白他们从哪里得到-1085485875。 –