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

二进制的小数转十进制

例如:0.101 -->1*1/(2^1)+0*1/(2^2)+1*1/(2^3)=1*0.5+0*0.25+1*0.125=0.625

即二进制转十进制是每一位乘以  ... 2^n,2^(n-1),...,2^1,2^0,2^(-1),2^(-2),...

 

十进制转二进制

由于二进制转十进制时:整数部分是乘以2,小数部分是除以2,那么反过来我们同样分两部分处理,并进行和之前相反的操作。

整数部分不断除以2,而小数部分不断乘以2。

显然第一次乘以2如果能得到一个1,那么在以2^(-1)为基数的位置上是1.我们用一个式子来解释

a=a0*0.5+a1*0.25+a2*0.125+... (a是十进制表示,右边是二进制表达式,由于是二进制,显然a0,a1,a2,...等只能取0或1)

我们将这个式子乘以2,变成2*a= a0+(a1*0.5+a2*0.25+...),分析一下这个式子,此时a0等于2*a小数点左边的数,要么为0,要么为1.

现在,我们两边同时减去a0,即将整数部分去掉,接着再次乘以2,可以继续分离出a1,接下来就是同样的步骤了。

可能我描述的还不够清晰,我们举个例子,5.71这个数,我们很容易知道整数部分的二进制是101,接下来我们计算0.71的二进制。

0.71*2=1.42  即 a0=1

0.42*2=0.84 即 a1=0

0.84*2=1.68 即 a2=1

0.68*2=1.36 即 a3=1

...

继续算下去我们可以得到一个0.1011...的二进制数,但是显然我们无法计算出完整的二进制值,因为0.71不论乘以多少次2都还会有小数部分,只有部分小数才可以在有限次的计算后得到精确的二进制数。

例如0.75

0.75*2=1.5 a0=1

0.5*2=1.0 a1=1

0.75(十进制)=0.11(二进制)

这就解释了浮点数的精度丢失问题,小数存储在计算机中后很大可能会出现数值上的偏差,有时会带来一些意想不到的影响。

浮点数在计算机中存储形式:数符 指数 尾数


以上为本人对小数的一些理解总结,如有不当之处望指正。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值