java 小数转换成二进制

32位单精度二进制 = [1个符号位] [8个阶码位] [23个尾数位]

64位单精度二进制 = [1个符号位] [11个阶码位] [52个尾数位]

小数 = [正负符号位]  [整数部分] . [小数部分] 

以32位单精度为例:

小数=-36.35

第一步:符号位,-用1表示,正的用0,所以[1个符号位] 是1

第二步:整数直接转换成二进制

  十进制36 = 二进制0010 0100

第三步:将小数转换成二进制

  十进制0.35 = 二进制0101 1001 1001 1001 10001 1001 其中1001循环

       计算过程:  0.35 x 2 = 0.7取整得0

                          0.7 x 2 = 1.4取整得1  取0.7的小数部分

                          0.4 x 2 = 0.8取整得0  取1.4的小数部分

                          0.8 x 2 = 1.6取整得1  取1.6的小数部分

                          0.6 x 2 = 1.2取整得1  取上次结果的小数部分

                          0.2 x 2 = 0.4取整得0

                          0.4 x 2 = 0.8取整得0

                                   ...循环

 第三步:移动小数点计算阶码

 整数二进制.小数二进制

 =0010 0100.0101 1001 1001 1001 10001 1001

 移动小数点,使二进制变成1.xxx*2n形式

 =001.0 0100 0101 1001 1001 1001 10001 1001*25

   去掉1.xxx前面的0

   =1.0 0100 0101 1001 1001 1001 10001 1001*25

  指数的真值是5加上偏移量127=132

 132的二进制是1000 0100 所以[8个阶码位]是1000 0100

第四步:取1.xxx形式小数点后23位得到[23个尾数]=0 0100 0101 1001 1001 1001 10001 1001 .. (取23位)

第五步:组合二进制

  32位单精度二进制 = [1个符号位] [8个阶码位] [23个尾数位]

           = [1] [1000 0100] [0 0100 0101 1001 1001 1001 10001 1001 .. (取23位)]

           = 1000 0100 0 0100 0101 1001 1001 1001 10001 1001 .. (取23位)

猜你喜欢

转载自www.cnblogs.com/blog-ice/p/10231693.html