2012-11-18 68 views
2

我正在使用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/240http://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操作者首先爲二進制,然後它產生正確的號碼。我的問題是,爲什麼這需要應用?做完這些之後,如果第一位是零而不是一個,你將不得不確定它的否定。這是什麼意思?

+0

嘗試舍入尾數而不是截斷它,並嘗試將結果解釋爲二進制補碼數。 – Bovinedragon

+0

@Bovinedragon我不明白當你說我正在截尾數,我在哪裏做這個?你能否給我多一點關於將結果解釋爲二進制補碼的信息? .8變成了1100的重複二進制模式,所以我重複它到22個位置,但是因爲我從小數點左邊移除了1,所以我在最後用另一個0填充它。我在哪裏截斷它?我只是把符號,指數和尾數放在一起,那最後的結果是正確的?至於這些數字如何存儲在內存中? –

+0

我只是不明白他們從哪裏得到-1085485875。 –

回答

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。