小数的二进制与十进制的转换

导言

在计算机的运行中,总是会不可避免的与二进制打交道,但是我们又通常使用十进制,所以十进制与二进制的转换就显得有些尤为重要了。小数的二进制与十进制的转换又跟整数略有不同,今天就了解一下小数的二进制与十进制的转换。

二进制的小数

首先看这样一个小数100101.11012(100101.1101)_2
我们吧上面的二进制小数分段得到如下结果
(100101)2.(1101)2 (100101)_2 . (1101)_2
那么其中的整数部分和小数部分一目了然,有了上面的结果之后我们开始对上面的二进制小数进行转换。

二进制小数转十进制

二进制转十进制采用的是先把二进制小数按加权系数形式展开,再相加之后得到其十进制值。

整数部分
(100101)2=125+024+023+122+021+120=37(100101)_2 = 1*2^5+0*2^4+0*2^3+1*2^2+0*2^1+1*2^0=37
小数部分
(1101)2=121+122+023+124=0.8125 (1101)_2 = 1*2^{-1}+1*2^{-2}+0*2^{-3}+1*2^{-4} =0.8125
那么我们就得出了这个二进制小数的十进制形式37.8125
我们在将上面两式整合就得到了
(100101)2.(1101)2=125+024+023+122+021+120+121+122+023+124=37.8125 (100101)_2 . (1101)_2=1*2^5+0*2^4+0*2^3+1*2^2+0*2^1+1*2^0+1*2^{-1}+1*2^{-2}+0*2^{-3}+1*2^{-4} = 37.8125

十进制小数转二进制

十进制转二进制同样需要将整数部分和小数部分分开进行处理,再拿上述数字37.8125举例

先处理整数部分37
整数部分的处理方式是使用短除法,对整数除二取余,余数倒序排列得到的就是其二进制形式。
小数的二进制与十进制的转换
由上图短除法后得到整数部分的二进制形式
(37)10=(100101)2 (37)_{10} = (100101)_2

再处理小数部分0.8125
小数部分的处理方式是对小数部分乘2取整,再去小数部分继续乘2取整,直到得到所需的位数或精度位置。

0.81252=1.6250.8125 *2 = 1.625 取整数部分1 留小数部分0.625
0.6252=1.250.625 *2 = 1.25取整数部分1 留小数部分0.25
0.252=0.50.25 *2 = 0.5取整数部分0 留小数部分0.5
0.52=1.00.5*2 = 1.0 取整数部分1 留小数部分0

将取得的整数部分顺序排列得到小数部分(1101)2(1101)_2

完成上述工作后,将整数部分小数部分相接的到37.8125的小数部分
(37.8125)10=(100101.1101)2(37.8125)_{10} = (100101.1101)_2
完成转换。