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

浮點數是我們在程序裏常用的數據類型,它在內存中到底是怎麼樣的形式存在,是我瞭解之前是覺得好神奇,以此記錄,作爲學習筆記。

現代計算機中,一般都以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. 最終根據位置填到對位的位置上:

能有個疑問:小數點前面的1去哪裏了?由於尾數部分是規格化表示的,最高位總是“1”,所以這是直接隱藏掉,同時也節省了1個位出來存儲小數,提高精度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章