浮点型数据的存储

int n = 9;
float* pFloat = (float*)&n;
printf("n的值为:%d\n", n);
printf("*pFloat的值为:%f\n", *pFloat);

*pFloat = 9.0;
printf("n的值为:%d\n", n);
printf("*pFloat的值为:%f\n", *pFloat);

运行结果为: 

 

有输出结果可知,当整型数据以浮点型取出时或浮点型数据以整型取出时,其结果与预期的结果差异很大,这就说明浮点型数据和整型数据在内存中的存储形式是不同的。下面介绍浮点型数据在内存中如何存储:

 

1.先将实数转化为二进制的形式;

2.任何二进制形式的实数均可写成  Q = (-1)^S * M * 10^E  的形式(科学计数法):

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

     (2) M的取值范围规定是[1,2),而计算机内部保存M时,因为M的第一位总是1,为提高精度可将1舍去,只存储小数部分(存储时低位补0),等到读取时再把1加上去;

     (3) E存储为无符号整数(unsigned int) ,为保证内存中的E始终大于0,需要给公式中的E加上一个中间值(float类型+127,double类型+1023) ,再以二进制形式存储。

           E在取出时又分为以下两种特殊情况:

             (1) E在内存中全为0:                                                                                                                               此时内存中M取出时不再加上第一位的1,而是还原为0.xxxxxx的小数(表示接近零很小的数字);

            (2) E在内存中全为1:                                                                                                                               此时如果内存中M全为0,表示正负无穷大;

以5.5为例,其在内存的存储(float类型):

     5.5(10) = 101.1(2) = (-1)^0*1.011*2^2(2)                                                                                           故 S = 0; M = 1.011; E = 2;

存储为:0  10000001  01100000000000000000000

 

 感谢大家的支持哦~我会继续努力的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值