前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机中“小数表示法”的前世!

计算机中“小数表示法”的前世!

作者头像
程序视点
发布2023-11-16 13:02:58
1820
发布2023-11-16 13:02:58
举报
文章被收录于专栏:程序小小事
将程序视点设为星标精品文章第一时间阅读

大家好,欢迎来到程序视点!我是小二哥。

前面的文章中,我们解释过:计算机的底层只能处理二进制格式的数据,也就是0和1,其他的文字、数字、字符等信息都要转换成二进制的格式。之后,又在此基础上,介绍了八进制、十六进制,以及BCD码的转换问题。

大家会发现,我们所有的示例都是在整数的基础上处理的。那小数呢?

在现实生活中,小数可也是普遍存在的。那你有没有思考过,这些小数在计算机中是如何存储的呢?

刚才说过了,计算机只认0和1。要想让计算机认识小数,那就得把小数转为二进制形式。任何一个数,我们都可以看成这样格式:

整数部分 + 小数部分

比如,25就可以看成只有整数部分;0.125就看成只有小数部分;123.6875就是整数部分得 123 加上小数部分的 0.6875。我想任何一个数都应该可以这样划分。

对于整数部分,转为二进制时,我们采用除基取余法,具体的原理和过程之前文章讲解过。现在我们只需要把小数部分表示出来就好。

对于小数部分采用乘基取整法。ps:先不要问为什么?这个会在后面一两篇文章里讲清楚。本文重点是知道怎么用二进制表示小数。

我们那刚才例子种,又有整数,又有小数的123.6875来解析吧。先来整数部分的 123。还记得那个顺口溜吗?除2取余,逆排序

得到整数部分的二进制:1111011

现在轮到小数部分的0.6875。采用乘基取整法:小数部分乘基取整,最先取得的整数为最高位,最后取得的整数位最低位,乘积为0时结束。

得到小数部分的二进制:1011

把两个二进制拼起来是这样的:

假设我们用 32 个bit位来表示,那么最前面的那个0是符号位,中间还有些0(我就用省略号代替了),结尾部分就是上面红色代表的整数位和绿色代表的小数位。

在这个红色部分和绿色部分之间,应该有一个划分区间的标识,不然这和我们整数的0111 1011 1011就没区别了。十进制中,我们有小数点(.)进行划分。但计算机中并没有专门的部件对小数点(.)进行存储和处理的呀!

为了解决这个问题,计算机科学家们就开始想啦。“不就是想用几个bit位表示小数部分吗?那我们约定几个bit位是用来表示小数不就好了吗?” 于是,就约定某个固定的bit位就是小数点(.)的位置。这就是我们计算机知识中定点数的由来。

定点数的意思是:小数点的位置在计算机的存储是约定好的,固定的。比如上面的例子,我们就约定后4个bit位用来表示小数,前28个bit位表示整数,那计算机就知道怎么划分了,也就知道整数部分和小数部分分别是多少啦~

其他

关于计算机中小数的问题,还远远没完呐。想想上面说的定点数,它通过固定bit位的个数来约定小数部分。就拿刚才例子中约定的4个bit位来讲。4个bit位能表示多少个小数呢?必然是有限个小数的值呀!可我们的小数可不只是有限个呢?

呜~呜~要解决的问题还很多!好在计算机科学家们已经帮我们解决了这些问题了。我们下期接着聊吧~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序视点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 其他
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档