浮点数在内存中的储存规则

根据国际标准IEEE754,任意一个二进制浮点数V可以表示下面的形式:

(-1)^S*M*2^E

  (-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。

  M表示有效数字,大于等于1,小于2。

  2^E表示指数位。


#include<stdio.h>

int main()
{
  int n =6;
  float*pfloat=(float*)&n;
  printf("n的值:%d",n);
  printf("*pfloat的值:%f",*pfloat);
  
  *pfloat=6.0;
  printf("num的值%:d",num);
  printf("*pfloat的值:%f",*pfloat);
  return 0;
}

 在运行代码之前可以大胆猜测下,第一个打印的数值肯定为6,按照我们整型在内存中储存的经   验,第二个打印的数值为9.0,第三个值为6,第四个值为6.0。

 这里第二个和第三的数值和我们猜想的有很大的差异,说明浮点数在内存中的存储和整型是完全不相同的。


在正式讲解之前我们先了解一下小数的二进制位表示

注释:有的小数是无法正正好好用二进制表示的

例如 6.8储存到内存中就是6.90000019

 


 

 例 5.5在内存中的储存

1.首先因为5.5是正数所以符号位S=0

2.IEEE规定M在内存中的存储需要把第一位去掉

1.011就储存011,这样做的目的是为了节省一位有效数字

3. 首先E的类型是一个无符号整数,64位的E是11个比特位,取值范围是0~2047,但是在科学计数法中E是可以表示负数 的,所以在内存存放E的真实值必须加上一个中间数127,例如2在内存中存储就是2+127=129 10000001

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值