关于浮点型数据float与double在内存的存储方式

众所周知我们的整型在内存中是以补码的方式小端存储的。那么我们的浮点型的float与double又是如何存储的呢?

首先float数据占用32bit,double数据占用64bit。
不论是float还是double都遵循的是IEEE规范。
同样,他们的存储也都分为三个部分(如下图),只不过float是32位,而double是64位;
在这里插入图片描述
在这里插入图片描述

首先高位是符号位不用解释。后面还有指数位尾数位。指数位和尾数位所占的大小是约定而成的,对于32位浮点数约定其中8位保存指数,这样能挤出23位保存尾数,在数值范围和数值精度之间尽量取得一个平衡。64位浮点数的指数部分就会扩展到11位了。

double与float的存储大同小异,不同的是指数部分和尾数部分的位数。所以这里不再详细的介绍double的存储方式了

我们以11.25为例,它的二进制表示为1011.01(转换方法:整数位除基取余,小数位乘基取整)。我们可以用科学计数法将其表示为1.01101* 2^3,于是我们得到了它的指数3,因为二进制的任何一个科学记数法都可以表示为 1.xxxx* 2^x,第一位都是1,所以我们完全不需要再表示它,将其省略(所以我们23bit的尾数部分可以表示精度为24bit的数据),取小数点后面的数字为尾数。。然后我们的指数部分采用移位存储(关于移位存储详见:原文地址:http://www.francesyang.com/archives/2017/07/16/99 转载请注明)

   		得到**11.25的存储方式如图**

在这里插入图片描述
至此, 这就是浮点型数据的存储方式了。

猜你喜欢

转载自blog.csdn.net/weixin_43730678/article/details/88412200
今日推荐