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)  尾数位:  

所以,结果为: 

 

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