2015-09-14 57 views
-1

我有一個整數-2147483647,它是十六進制中的0x8000001。 當我使用在線浮動轉換器時,由於四捨五入,它表示它將轉換-2147483648。如何決定何時將十進制/整數轉換爲浮點數

現在我必須在c中以單精度實現這個int-to-float函數。

我已經實現了所有其他功能,但我並不知道四捨五入。 什麼時候決定什麼時候回合?編輯: 這是我迄今爲止的功能。 (按照函數的工作順序)
1)首先我檢查int是否定的,我將它否定並賦給unsigned int。我也設置了符號位爲1.

2)爲了得到指數,我搜索unsigned int左邊的第一個'1'位並得到它的位置。

3)我添加127的位置,並將其向左移位23位以符合IEEE 754標準。

4)使用位置計數器I對2),我將無符號整數與右對齊,以便第31位是第二個最右邊的'1'位。 (因爲你省略了每個IEEE浮點數所假定的第一個'1'位)

5)我右移int 9位,使它符合標準的尾數插槽。

6)我添加符號位,指數和尾數以得到原始int的最終位表示。在單精度-2147483647如十六進制和整數所示

+0

雙浮動只有53位的精度。精確地表示「-2147483647」需要64位。 – Barmar

+7

@Barmar我認爲你的數學是關閉的。該數量需要32位。不適合浮動,但適合雙倍。 – Gene

+0

它是十六進制的-0x7fffffff,而不是0x80000001。 0x80000001不能用32位有符號類型表示,但其值爲2147483649. –

回答

1

三個最接近的值,是:

hex ceffffff = -2147483520 
hex cf000000 = -2147483648 
hex cf000001 = -2147483904 

所以六角cf000000 = -2147483648被使用,因爲它是最接近。

相關問題