计算机二进制表示小数,小数的二进制表示

也许中学老师会告诉5、10、20等等的十进制数字怎么化成二进制数字,但又没有老师告诉你怎么将十进制的0.1变成二进制的小数呢?

我们将一个十进制整数化为二进制是这样操作的:在十进制的计算法则中,将十进制数除以2,得到商和余数;把商除以2,得到商和余数;...重复下去,直到商为0。然后把每次得到的余数按倒序排列,就得到了二进制数字。比如6:

$$\begin{aligned}6\div 2=3...0 \\ 3\div 2=1...1 \\ 1\div 2=0...1\end{aligned}$$

倒过来就是110。这就是二进制中的6了。

为什么要这样操作呢?这要从二进制变成十进制的方法谈起。一个二进制数$abcde$变成十进制数的方法是$e+2d+2^2 c+2^3 b+2^4 a$,这从二进制的计数规则就可以得出:其实就是说a,b,c,d,e分别代表着$10^4 , 10^3 , 10^2 ,10,10^0$位,但是二进制的10就是十进制的2,所以就得出上面的公式。从二进制变十进制的方法就不难得出十进制的法则了,不断除以2,计算余数就分别可以得出a,b,c,d,e了。

整数还是挺好办的,那么小数怎么办呢?比如$0.1=\frac{1}{10}$,而$(10)_{10}=(1010)_2$,所以有

$$(\frac{1}{10})_{10}=(\frac{1}{1010})_2$$

如果你熟悉二进制的计算,你直接可以在二进制的法则内算$\frac{1}{1010}$,就得出0.1的二进制表示啦。不过这是一种比较麻烦的方法,关键是我们大多数人都不熟悉二进制的计算。那怎么办呢?我们可以想一种迂回的方法。虽然在我们不懂二进制的具体计算细则,但是我们不难发现,在二进制里除以10还是很容易的,就跟十进制一样,同样是向左移动小数点而已。所以我们不妨先将十进制的小数不断乘以2,然后取整数部分,化为二进制整数,然后再不断除以二进制的10。

比如0.1

$$\begin{aligned}0.1 \times 2^9=51.2 \\ (51)_{10}=(110011)_2 \\ 110011 \div 10^9 =0.000110011\end{aligned}$$

也就是说十进制0.1表示为二进制大约为0.000110011。不难发现,这种操作是“永无止境”的,即十进制的有限小数0.1在二进制中是无限循环小数!这真是一个有趣的事实!

上述小数转换二进制的方法计算量未免还是有点大了。所以经过简化可以变成一个计算量比较小的“乘2取整”法:对十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。如此不断重复,直到小数部分为0或达到精度要求为止。第一次所得到为最高位,最后一次得到为最低位。

比如0.1

$0.1 \times 2=0.2$,取整为0,小数为0.2;

$0.2 \times 2=0.4$,取整为0,小数为0.4;

$0.4 \times 2=0.8$,取整为0,小数为0.8;

$0.8 \times 2=1.6$,取整为1,小数为0.6;

$0.6 \times 2=1.2$,取整为1,小数为0.2;

...

开始陷入循环了。

不难得到二进制表示为0.000110011...,循环节为0011。其实,大多数十进制有限小数变成二进制的时候都是无限循环的,除了那些$\frac{1}{2^n}$类型的小数。当然,不管怎么变,在十进制的无理数也不会变成二进制的有理数,反之亦然。

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

打赏

微信打赏

支付宝打赏

因为网站后台对打赏并无记录,因此欢迎在打赏时候备注留言。你还可以点击这里或在下方评论区留言来告知你的建议或需求。

如果您需要引用本文,请参考:

苏剑林. (Feb. 05, 2013). 《小数的二进制表示 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/1907

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值