续篇:浮点数在内存中存储的一道实战例题

在C语言数据在内存中的存储一篇中我引出了这样一道引例,并由此介绍了浮点数是如何在内存中存储的,现在我们理论成立,实践开始,借助浮点数的存储方式来重新审视这道题:

#include<stdio.h>
int main()
{
	int n = 9;
	float* pf = (float*)&n;
	printf("n的值为:%d\n", n);
	printf("*pf的值为:%f\n", *pf);
 
	*pf = 9.0;
	printf("n的值为:%d\n", n);
	printf("*pf的值为:%f\n", *pf);
	return 0;
}

首先,第一个n为9毫无疑问,将一个整型以整型类型打印,二者相匹配所以打印出9.

对于pf来说,它是一个类型为float*的指针变量,它会站在float的角度看待内存中的n.

n=9;

//00000000 00000000 00000000 00001001 ——原码

//pf会以浮点数的角度划分n:

//0 00000000 00000000000000000001001

//S       E                            M

//此时E为全0,有效数字M不再加上第⼀位的1,⽽是还 原为0.xxxxxx的⼩数。

//浮点数的指数E等于1-127(或者1-1023)即为真实值

//还原:(-1)^0*00000000000000000001001*2^126

//又因为%f打印小数点后6位的数字,所以*pf第一次打印的结果为0.000000

*pf=9.0;

//9.0(10)

//1001.0(2)

//(-1)^0*1.001*2^3

//S=0,M=1.001,E=3 

//E存=3+127=130

//存到内存中去:

//0 10000001 00100000000000000000000

//n会以有符号整型的角度看待这组数据

//最高位0说明该数为正,所以原码,反码,补码相同。

//所以打印出的值就是1000000100100000000000000000000(2)

//1091567616

最后,将*pf以%f的形式打印,类型匹配,打印出9.000000也毫无疑问正确。 

以上,便是对之前浮点数存储引例介绍,对于其中浮点数是如何在内存中存储不清楚的小伙伴可以移步我之前的内容——c语言数据在内存中的存储。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值