例如我有0 100 1110
sign exponent mantisa
這等於3.75
。如何將其轉換爲十六進制或八進制形式?我幾個小時都在努力搜索。請幫忙。將二進制浮點數轉換爲十六進制浮點數
你能幫助我在這裏100
是4
1110
是7/8
沒辦法這是(7/8) * 2^4
是3.75
。
例如我有0 100 1110
sign exponent mantisa
這等於3.75
。如何將其轉換爲十六進制或八進制形式?我幾個小時都在努力搜索。請幫忙。將二進制浮點數轉換爲十六進制浮點數
你能幫助我在這裏100
是4
1110
是7/8
沒辦法這是(7/8) * 2^4
是3.75
。
標誌應該很明顯。
尾數是指1 + 1/2 *第一位+ 1/4 *第二位+ 1/8 *第三位......聽起來很熟悉嗎?它基本上是二進制計數,除非它是'小數點後'。
指數表示將mantisa乘以2 ^指數。但是,你如何獲得exponent
中代表它代表什麼價值的位?我做了一些谷歌搜索,顯然如果最高位已設置,其餘的是0
(10,100,1000等),那麼你有1
,如果它是101
你有2
,等等。這意味着如果它是011
你有0
,010
你有-1
等等。所以在這種情況下,我們有1
指數。
所以在這種情況下,你想要計算1.875(mantisa)* 2^1(2 ^指數)並使其爲正(符號)。
瞭解更多:http://en.wikipedia.org/wiki/Double-precision_floating-point_format(它是雙精度的大小,但所有的原則應「應用」到任何大小浮點)
編輯:下面是關於指數更好的解釋。
首先,在IEEE浮點中,指數的最小值和最大值具有特殊的含義 - 所有的零意味着「這是一個零或一個低於正常的數字」,所有的意思是「這是無窮大或NaN」。因此,即使我們有三位指數 - 000
到111
,只有001
到110
表示正常指數 - 這隻有6個值。
現在,所謂的「指數」偏差被用來將這個1 ... 6範圍轉換爲負值和正值 - 特別是,您希望-2 ... 3範圍(最大正指數>最大負指數的大小,所以你不能做1/smallest normalized number
得到溢出。然而,1/denormalized number
可以產生Infinity
。)
我們得到這個通過採取指數的值,如果它不是一個特殊情況下,我們從其二進制值中減去3,並將其作爲指數值。因此
0 100 1110
是
0
- >正號
100
- >二進制值4,減去3,指數1
1110
- > 1 + 7/8
(1 +7/8)* 2^1 = 3.75
只需轉換位,就好像它是一個整數。忽略你正在處理浮點數的事實。
01001110
轉換爲十六進制4E
,因爲0100
是4
和1110
是E
。 (請注意,我組四肢如何。)
同爲八進制,它成爲116
,因爲01
是1
,001
是1
和110
是6
。 (請注意,除第一組之外,我是如何分組的,除了第一組外。)
但問題是'4E'不是3.75。如何將其轉換回小數點。 – Yoda 2013-03-17 10:00:14
我知道如何獲得二進制浮點數,我問了有關轉換的問題。 – Yoda 2013-02-10 09:29:52
哦,那真的很容易,你只是 - 好吧,其他答案打我吧:) – Patashu 2013-02-10 09:30:47
你能幫我嗎這裏'100'是'4'' 1110'是'7/8'沒有辦法就是'(7/8)* 2^4'是'3.75'。 – Yoda 2013-03-17 10:02:19