浮点数分float和double,分别为32位和64位。
重点:浮点数与二进制的转换
符号位 指数 尾数 长度
float 1 8 23 32
double 1 11 52 64
基本上float和double的转换二进制数的方法大同小异
这里只拿float来做转换
0 | 000 0000 0 | 000 0000 0000 0000 0000 0000
符号位 指数位 尾数位
例:
41 5E 00 00 => 13.875f
=> 0100 0001 0101 1110 0000 0000
=> 0|100 0001 0|101 1110 0000 0000
符号位为0,是正数,指数等于100 0001 0 - 127 => 130 - 127 => 3
那么指数位结合尾数位
1.101111 * 2e3 => 1101.111 => 13.875f
注 为什么101 1110 0000 0000得到1.101111?
可以从下面的例子看出实数部分的1可以省去,需要从二进制转换成浮点数时,
再加上计算即可。
小数转换二进制方法
0.875 0.125
2 2
----- -----
1.750 1 0.250 0
0.750 2
2 -----
----- 0.500 0
1.50 1 2
0.50 -----
2 1.000 => 0.001
-----
1.00 => 0.111
float i = 13.875f; => 转换二进制
拆分 13 => 1101 组合 1101.111 => 1.101111 * 2e3
0.875 => 0.111
符号位0,指数位127+3 => 100 0001 0,
尾数位省略实数的1 => 101 1110 0000 0000
综合 => 0100 0001 0101 1110 0000 0000 => 41 5E 00 00
float i = -0.125f; => 转换二进制
拆分 0 => 0 组合 0.001 => 1.000 * 2e-3
0.125 => 0.001
符号位1,指数位127-3 => 011 1110 0,
尾数为省略实数的1 => 000 0000 0000 0000
综合 => 1011 1110 0000 0000 0000 0000 => BE 00 00 00