浮点数在内存中的存储

浮点数和数学的概念一样,在c语言中,整数是没有小数部分的数,例如2,23,3334都是整数,而3.14,0.22,2.000都不是整数在数学中它和实数的概念差不多。2.75,3,16E7,7.00都是浮点数
关键我们是要理解浮点数和整数的存储方案的不同,计算机把浮点数分成小数部分和指数部分来表示,而且分开储存的两部分,虽然7.00和7在数值上相同,但是他们的存储储存方式不同,再十进制下,可以把7.0写成0.7E1.这里0.7是小数部分 ,当然把计算机在内部使用二进制和2的幂进行存储

+    .3141591

                     符号                小数                                                             指数     ——3.14159

以浮点格式在十进制中的存储

int main()
{ int n=9;
float *pFloat=(float*)&n;
cout<<"n的值为"<<n;
printf("*pFloat的值为%f\n",*pFloat);
*pFloat=9.0;
cout<<"n的值为"<<n;
printf("*pFloat的值为%f\n",*pFloat);




}

为何会出现这种情况呢?

举个例子

v=5.5

 =(-1)^0*1.011*2^2

如果是正数那么s=0,x显然负数M表示小数E表示指数

s=0

m=1.011

E=2

IEEE 754规定

对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M

 

                                                             单精度浮点操作符

对于64位比的浮点数,最高的以为是浮点位是1位是s,剩下52位是有效数字

 

在IEEE754规定E必须是个无符号整数如果E是8位则取值位0~255,如果E是16位则E为11位则取值为0~2047对于8位得E,中间值为127 对于16位中间值则是1023 我们将我们得到的数字与中间值相加

E=2时

2+128=129

表示为 10000001

用浮点表示则是

010000001011

 而题目中9用整形表示则为

0 000000000000000000000001001

在用浮点表示是则为截取32位

因为浮点位是0000000000

就是0得2进制

所以在计算机表示为2^-127次方可以忽略不计了

所以显示为0.000000

而浮点型得存储方式由于整型不同在存储01000001011中

若是整形存储则为1091567616

所以正因为存储得方式不同造成所给出的答案不同

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值