java中浮點數表示方式

java虛擬機中的浮點數分爲float和double兩種,分別爲32位和64位.它參考了IEEE 754的規範對浮點數進行處理。下面以float爲例 ,分析一下float數的表示方法. 

float的32位分成三個部分來表示一個浮點數:

浮點數的取值計算公式爲: 

解析: 

    1) 當符號位s的取值爲0時,sflag爲1, 當s爲1時,sflag爲-1. 所以有: 

     2) e 爲指數位,用 8 位表示
     3)  m 爲尾數值,佔用空間爲23位,但是根據 e 的取值,有 24 位精度。所以引入了一個附加位,規則如下:  m的值會根據e的值會動態變化。 當8個指數位e全部爲0,尾數位m附加0(在左邊附加),否則,附加1. 

以-5的表示爲: 

System.out.println( Integer.toBinaryString(Float.floatToRawIntBits(-5)) );

結果爲:  
1       1000 0001       0100 0000 0000 0000 0000 000
符號位    指數位           尾數位

指數位1000 0001不全爲0,所以尾數位(從左邊)附加1,實際 尾數位爲: 

1 + 010 0000 0000 0000 0000 0000 = 1010 0000 0000 0000 0000 0000

按照上面的公式:  

計算各部份的值: 

      1)     sflag:    -1

      2) m的計算複雜點,尾數位表示2的指數次方的和。計算過程:

    3)  尾數位:  

所以,結果爲: 

 

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