https://github.com/wmui/blog/issues/1
想搞清这个问题,首先要明白十进制和二进制的转换关系
以数字43.21转换为二进制进行说明
43/2=21...1
21/2=10...1
10/2=5...0
5/2=2...1
2/2=1...0
1/2=0...1
整数部分:101011
总结:不断除以基数(2进制的基数是2),倒序取余数,110101
0.212=0.42 ...0
0.422=0.84 ...0
0.842=1.68 ...1
0.682=1.36 ...1
0.36*2=0.72 ...0
...
(一直计算到0.72为0.00停止,就会得到精确数,这也是为什么计算机在小数计算上出现误差的原因)
小数部分:0.00110
总结: 不断乘以基数,正序取整数部分进位,00110
结果:(43.21)10 约等于 (101011.0011)2
二进制转十进制
整数部分:
101011=122222+0+1222+0+12+1=43
小数部分:
0.0011=0(1/2)+0(1/4)+1(1/8)+1*(1/16)=0.1875
结果:43.1875 (101011.0011)2 约等于 (43.21)10
总结:整数位从右至左,依次乘以2的0次方,2的一次方。小数位从左至右,以此乘以2的-1次方,2的-2次方
一图胜千言,最快的二进制转十进制方法