Я использую 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)
Что я здесь делаю не так???
Спасибо.
Редактировать:
Поскольку я пишу приложение AR DRONE с помощью node/js, если я использую эти функции node.js:
var buffer = new Buffer(4);
buffer.writeFloatBE(-0.8, 0);
return -~parseInt(buffer.toString('hex'), 16) - 1;
Я получаю правильный результат в соответствии с документацией. Я просто не понимаю, что я делаю неправильно, когда пишу это длинной рукой. Я хочу понять, что происходит. Любая помощь очень ценится.
Спасибо.
ОБНОВИТЬ:
Итак, я понял (из приведенного выше кода javascript), что если я сначала применю побитовый оператор НЕ к двоичному коду, он затем выдаст правильное число. У меня вопрос, зачем это нужно применять? После этого вам нужно будет определить, является ли он отрицательным, если первый бит равен нулю, а не единице. Какой в этом смысл?