C语言 小数点在内存中的存储

 小数点在内存中的存储和整型是不一样的 由整型和小数两个部分组成

比如2.5 他的二进制为0010.1 小数点后面的1代表的是2^-1;也就是0.5

再来看一个数 5.5  二进制为101.1  写成1.011x2^2

来看一组标准

因为是二进制所以是2^2 也就是相当于十进制的10^2一样 根据这个标准  所有小数都以

V=(-1)^s x M x 2^E 这个方式存储

IEEE754规定:

对于32位的float,最高的一位存符号S,接着8为存E, 剩下的23位存有效数字M

对于64位的double ,最高以为存符号位S 接着11位存E 剩下的52位存有效数字M

浮点数存的过程 

IEEE754对有效数字M和E有一些规定

因为1<=M<2的 所以可以写成1.xxxxx的形式 IEEE754规定计算机在保存M的值时,总是省略1只保留小数点等读取的时候再把1加上去 目的是为了节省空间 让更多的空间留给M

以32位浮点数为例,留给M只有23位,将第⼀位的1舍去以后,等于可以保

存24位有效数字。

E的存储比较复杂

首先 IEEE754规定E的值为 unsigned int 

这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE754规定,存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。⽐如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。

小数点后面的数 的二进制有的配不出来所以有的小数点无法精确

浮点数的取出

E不为全0或1时 只要减去中间值即可

当E为全0时 E的真实值其实是-126或-1023 也就是相当于接近0 此时M就会变成0.xxxx 就是无穷小

当E全为1时 也就是255 E的真实值为128 2^128是一个非常非常大的数字 此时m为1.00000 这是就是无穷大

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值