文章目录
前言
这里是关于C语言进阶内容,关于浮点数在内存中的存储方式的介绍。
一、浮点数的类型
浮点数有两大类型:单精度浮点数和双精度浮点数。双精度浮点数的精准度比单精度浮点数高。
二、例题引导
下面有一道题我们可以看一下,请写出你的答案!
int main()
{
int n = 9;
float *pFloat = (float *)&n;
printf("n的值为:%d\n",n);
printf("*pFloat的值为:%f\n",*pFloat);
*pFloat = 9.0;
printf("num的值为:%d\n",n);
printf("*pFloat的值为:%f\n",*pFloat);
return 0;
}
答案如下,你是否想对啦!接下来让我们看一看浮点数在内存中是如何存储的!
三.浮点数储存规则
根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式
v=(-1)^S*M*2^E
(-1)^S表示的是浮点数V的符号,S=0表示整数,S=1表示负数。
M为大于1,小于2的小数。
E为指数。
这种表示和10进制的科学计数法相似。10进制一般为:5.0*10^2,二进制为1.0101*2^3,
例:十进制的5.5,表示为二进制如图
十进制:5.5=5.5*10^0;
二进制:101.1=-1^0*1.011*2^2;
但E在存放时是以无符号数来存放的,但在现实中E有正有负,所以我们需要加上一个中间数来使所有的E以正数的形式存放,当使用时,我们再减去即可。
8位的E范围位0到255,11位的E范围为0到2047
四.例题讲解
第一个问题n以%d的形式输出即为9。
第二个问题,9的原码在放入float*时会被不一样的形式解读,指数全为0,即这个数无限接近于0,即为0
第三个问题,当float形式的9.0放入%d的形式解读变为1091567616
第四个问题,9.0当被float的形式输出时为9.0。
总结
本片主要讲啦浮点数的储存规则,以及不同输出形式的情况下,出现的结果。
希望大家多多支持!你的点赞是我创作的动力!