数据在内存中的存储-2

  1. 浮点数在内存中的存储:

    前面我们探讨了整数在内存中的存储,那么浮点数在内存中是怎么存储的呢?

    根据标准中的定义,一个浮点数可以写成V = (-1)^S * M * 2^E的形式,S的值为0或1,0表示这个数为正数,0表示负数,M的取值范围是1~2这个公式我们先不管,我们来看看一个浮点数是怎么化成二进制的

    5.2

    我们首先将整数部分化为二进制,即101,小数部分0.2×进制2得到0.4,取0就是我们第一位小数,继续这样操作,0.4*2= 0.8取0,0.8*2= 1.6取1,0.6*2=1.2取1......由于有的数需要一直这样操作,因此浮点数在内存中的存储是有精度问题的。5.2 = 101.0011,写成上面的公式就是(-1)^0 * 1.010011 * 2^2。

    我们知道float是4byte,也就是32位,其中最高位存放S的值,后面8位存放E的值,剩余23位存放M的值

    其中由于M的取值范围是1~2,所以必有第一位是1,因此存储的时候可以将1省略,当要用时再将1补上去就行,这样做可以多一位存储数据,提高了精确度。存放E时我们需要考虑E为负数的情况,这里标准中规定E(真实值)+127 = 存放值。就拿上面5.2来说,内存中存的是   01000000001001100000000000000000,当取出时,E有两种特殊情况,E全为0,这时我们E的真实值是1-127=-126,M也不再加上前面的1,而是直接写成0.xxxxxxxx的形式,因为当E为-126时,该数据已经无限趋近于0了,同样的,E全为1,M全为0时,该数据表示无穷大了。


    double类型的数据存储:同float类型类似,只不过double占64bit,其中最高位为S,11bit为E,52bit为M,E(真实值)+ 1023 = 存放值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值