我正在使用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。 –