2013-02-10 183 views
0

例如我有0 100 1110sign exponent mantisa這等於3.75。如何將其轉換爲十六進制或八進制形式?我幾個小時都在努力搜索。請幫忙。將二進制浮點數轉換爲十六進制浮點數

你能幫助我在這裏100411107/8沒辦法這是(7/8) * 2^43.75

回答

1

標誌應該很明顯。

尾數是指1 + 1/2 *第一位+ 1/4 *第二位+ 1/8 *第三位......聽起來很熟悉嗎?它基本上是二進制計數,除非它是'小數點後'。

指數表示將mantisa乘以2 ^指數。但是,你如何獲得exponent中代表它代表什麼價值的位?我做了一些谷歌搜索,顯然如果最高位已設置,其餘的是0(10,100,1000等),那麼你有1,如果它是101你有2,等等。這意味着如果它是011你有0010你有-1等等。所以在這種情況下,我們有1指數。

所以在這種情況下,你想要計算1.875(mantisa)* 2^1(2 ^指數)並使其爲正(符號)。

瞭解更多:http://en.wikipedia.org/wiki/Double-precision_floating-point_format(它是雙精度的大小,但所有的原則應「應用」到任何大小浮點)

編輯:下面是關於指數更好的解釋。

首先,在IEEE浮點中,指數的最小值和最大值具有特殊的含義 - 所有的零意味着「這是一個零或一個低於正常的數字」,所有的意思是「這是無窮大或NaN」。因此,即使我們有三位指數 - 000111,只有001110表示正常指數 - 這隻有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

+0

我知道如何獲得二進制浮點數,我問了有關轉換的問題。 – Yoda 2013-02-10 09:29:52

+0

哦,那真的很容易,你只是 - 好吧,其他答案打我吧:) – Patashu 2013-02-10 09:30:47

+0

你能幫我嗎這裏'100'是'4'' 1110'是'7/8'沒有辦法就是'(7/8)* 2^4'是'3.75'。 – Yoda 2013-03-17 10:02:19

1

只需轉換位,就好像它是一個整數。忽略你正在處理浮點數的事實。

01001110轉換爲十六進制4E,因爲010041110E。 (請注意,我組四肢如何。)

同爲八進制,它成爲116,因爲01100111106。 (請注意,除第一組之外,我是如何分組的,除了第一組外。)

+0

但問題是'4E'不是3.75。如何將其轉換回小數點。 – Yoda 2013-03-17 10:00:14