关于10进制换算成2进制数的问题
看了一些关于浮点数存储方式的视频之后,我有个疑问,那就是十进制(为方便起见,以下用"()"来标示)小数如何换算成二进制(以下用"[]"来标示)小数的.
进制换算都以"权"为基础,比如,(1010)=1E3+0E2+1E1+0E0(或 1*10的3次方+0*10的2次方+1*10的1次方+0*10的0次方)
而[1010]=1*2的3次方+0*2的2次方+1*2的1次方+0*2的0次方
若要把[1010]换算成十进制数,就要把[1010]的二进制数的权换成十进制的权,[1010]=1*2的3次方(也就是8)+1*2的1次方(也就是2)=(10)
现在的问题是整数之间的换算很简单,但小数怎么换算呢?比如(0.1)换算成2进制代码是多少?
我的思路是这样的:
若要计算(0.1)的二进制数那就要把(0.1)的权换成二进制的权,
而[0.1]=1*2的-1次方=(0.5),以此类推:
[0.01]=(0.25)
[0.001]=(0.125)
[0.0001]=(0.0625)
[0.00001]=(0.03125)
所以,(0.1)=[0.0001]+(0.0375)
下面就要把(0.0375)换成二进制权,
(0.0375)=[0.00001](也就是(0.03125))+(0.00625)
也就是
(0.1)=[0.0001]+[0.00001]+(0.00625)
下面就要把(0.00625)化成二进制权……
如此一来就没完没了,永远也化不了了,或者说(0.1)化成二进制数是个无限小数.很显然我是算错了,但我又不知道自己错在哪里,请高手指点下.