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取整得00.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位)]
= 1 1000 0100 0 0100 0101 1001 1001 1001 10001 1001 .. (取23位)