浮點數的二進位制表示 IEEE 754標準

2021-09-02 13:37:52 字數 986 閱讀 7040

浮點數是我們在程式裡常用的資料型別,它在記憶體中到底是怎麼樣的形式存在,是我了解之前是覺得好神奇,以此記錄,作為學習筆記。

現代計算機中,一般都以ieee 754標準儲存浮點數,這個標準的在記憶體中儲存的形式為:

對於不同長度的浮點數,階碼與小數字分配的數量不一樣,如下:

對於32位的單精度浮點數,數符分配是1位,階碼分配了8位,尾數分配了是23位。

根據這個標準,我們來嘗試把乙個十進位制的浮點數轉換為ieee754標準表示。

例如:178.125

1.先把浮點數分別把整數部分和小數部分轉換成2進製

1.整數部分用除2取餘的方法,求得:10110010

2.小數部分用乘2取整的方法,求得:001

3.合起來即是:10110010.001

4.轉換成二進位制的浮點數,即把小數點移動到整數字只有1,即為:1.0110010001 * 2^111,111是二進位制,

由於左移了7位,所以是111

2.把浮點數轉換二進位制後,這裡基本已經可以得出對應3部分的值了

1.數符:由於浮點數是整數,故為0.(負數為1)

2.階碼 : 階碼是需要作移碼運算,在轉換出來的二進位制數里,階數是111(十進位制為7),

對於單精度的浮點數,偏移值為01111111(127)[偏移量的計算是:2^(e-1)-1, e為階碼的位數,

即為8,因此偏移值是127],即:111+01111111 = 10000110

3.尾數:小數點後面的數,即0110010001

4.最終根據位置填到對位的位置上:

浮點數的二進位制表示

前幾天,我在讀一本c語言教材,有一道例題 includevoid main void 執行結果如下 num的值為 9 pfloat的值為 0.000000 num的值為 1091567616 pfloat的值為 9.000000 我很驚訝,num和 pfloat在記憶體中明明是同乙個數,為什麼浮點數...

浮點數的二進位制表示

日期 2010年6月 6日 1.前幾天,我在讀一本c語言教材,有一道例題 includevoid main void 執行結果如下 num的值為 9 pfloat的值為 0.000000 num的值為 1091567616 pfloat的值為 9.000000 我很驚訝,num和 pfloat在記憶...

浮點數的二進位制表示

1.前幾天,我在讀一本c語言教材,有一道例題 includevoid main void 執行結果如下 num的值為 9 pfloat的值為 0.000000 num的值為 1091567616 pfloat的值為 9.000000 我很驚訝,num和 pfloat在記憶體中明明是同乙個數,為什麼浮...