您的位置:首页 > 理论基础

计算机是如何存储浮点数的

2017-07-23 18:26 246 查看
在上一篇博客,我叙述了整型数在计算机的存储方式,这一篇博客主要讲一讲浮点数在计算机中的存储。(为什么要写下这些额,是因为并非科班出身,这段时间做一个项目时,涉及到modBus协议,需要自己写应用层协议部分,需要将一帧一帧的数据送给plc故要考虑到数据在plc中的存储方式,这样plc才能正确的配置读取)

不管是C/C++ 还是C#,对于浮点数的存储,不外乎有两种:float 以及double 型,这两种数据类型都是遵循IEEE标准的,float 以32位长度存储数据,而double 型则是以64位长度存储数据的,不管是32位还是64位,它们基本的格式是一致的,即数据的高低角度来说,首先是符号位(0正,1负),然后是指数位,最后为尾数位,请看以下示意图





下面我们就以一个例子具体讲讲是怎样一步一步将一个浮点数存进计算机的,就以8.25为例,首先我们要把他改成科学计数法,但是计算机只认识010101这样的数字,所以就需要将之改为二进制的科学计数法,小数改科学计数法时,整数部分和小数部分是需要分来排的,有一点区别是,正数部分是除以2,倒叙取余,而小数部分则是乘于2,正序取正,因此,8.25可以写为1000.01,科学计数法就是1.00001*2^3,由于第一位都是1,所以位数部分就可以表示24个长度。

需要注意的是指数部分,由于8位指数表示部分需要表示正负两个方向(因为指数也可能是负的嘛),范围为-127到128,所以可能因为是这个,10000000就表示为1次幂吧,3次幂就是10000010,又原数据8.25为正数,所以首位为0,这样在用一连串的01表示就为:01000001000001000000000000000000 。再则就我们那个项目来讲,用得汇川AM600PLC ,数据采用的是小端模式存储,存储位置是16位保持寄存器,从地址40008开始,40008,40009,将上述01串转换为8位十六进制,分两部分,各4位,高位存在40009,低位存在40008,最后得证,实际有效。

                                                                                                                                                                                                    by liuliu 20170723

文章参考http://www.cnblogs.com/xugang/archive/2010/05/04/1727431.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: