前言
对于十进制的整数使用二进制表示很简单,但是对于十进制小数如何使用二进制进行存储?十进制的小数又何如使用二进制小数表示?此文章描述了如何将十进制小数转换为二进制小数以及浮点数再内存中时如何进行存储。
二进制小数
在计算机中,无论什么数据,最终存储都为二进制,对于整数部分很容易表示,但是对于非整数则比较困难。例如,十进制数0.125
可表示为二进制0.001
,怎么得来的?简单的计算可以用0.125
不断乘2
,结果小于1
将二进制位记为0
,结果大于1
时将二进制位记为1
:
0.125 * 2 = 0.25 二进制位记作 0
0.25 * 2 = 0.5 二进制位记作 0
0.5 * 2 = 1 二进制位记作 1
所以得出结果为0.001
另外可以把可以把十进制数
0.125
看做1/2/2/2 = 1*2^-3
,十进制1
换算为二进制还为1
,二进制的负指数则相当于二进制数1
右移位,用2
的指数记为2^-3
。
上面的例子因为能够用2
的指数表示,所以能够被二进制精确的表达,但是有些情况,则无法使用二进制准确表达,例如一个人尽皆知的例子: