从0开始学c语言-25-浮点型在内存中的存储

本文从0基础学习C语言的角度,详细讲解浮点型在内存中的存储方式,包括最大范围查看、存储规则及实例分析,通过Visual Studio进行辅助理解,帮助读者掌握浮点数的二进制表示和取值原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人0基础开始学编程,我能学会的,你也一定可以,学会多少写多少。

下载安装请从官网入手,社区版本即可,这里主要使用的软件是VS2019,图标如下。

 上一篇:从0开始学c语言-24- 剖析数据在内存中的存储(整型在内存中的储存和练习)、char的取值范围、大端小端储存_阿秋的阿秋不是阿秋的博客-优快云博客

目录

浮点型在内存中的存储

教你怎么看整型和浮点的最大范围

例子展示

浮点数存储规则

例子

单精度浮点存储示意图

有效数字M和指数E的规定

有效数字M 

指数E(包含保存和取出浮点过程示意)

回到题目

首先分析前半部分

 然后是后半部分


浮点型在内存中的存储

3.14159
1E10
浮点数家族包括: float double long double 类型。
浮点数表示的范围: float.h 中定义

教你怎么看整型和浮点的最大范围

//limits.h中定义了整型取值范围
//float.h中定义了浮点
#include <limits.h>
#include <float.h>
int main()
{
	INT_MAX;
	FLT_MAX;
	return 0;
}

选中之后,按快捷键f12或者Alt+f12,或者右击选择转到定义或者速览定义。

就可以看到取值范围了。

例子展示

int main()
{
 int n = 9;
 float *pFloat = (float *)&n;
//(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 可以表示成下面的形式:
(-1)^S * M * 2^E
(-1)^s 表示符号位,当 s=0 V 为正数;当 s=1 V 为负数。
M 表示有效数字,大于等于 1 ,小于 2
2^E 表示指数位。(2^1)

例子

照着上面说的,我们来试试把十进制的浮点数字,用 (-1)^S * M * 2^E 的形式来表示一下。

5.5 是一个浮点数-此时是10进制形式
5的二进制是101  , 剩下的0.5 相当于二进制的 0.1
因为 十进制的 0.5 = 5*10的-1次方 ,类比一下的话
        二进制的 0.1 = 1*2  的-1次方  ,1*2的-1次方 = 2的1次方分之一 = 1/2 = 0.5
那么 十进制的5.5就可以表示为 二进制的101.1
因为  M表示有效数字,大于等于1,小于2。
所以我们需要把 101.1的小数点向前挪动两位, 101.1 ——> 1.011 * 2^2
类比一下十进制的 167.8把小数点向前挪动两位,那么二进制101.1的小数点向前挪动两位,也是一样的道理
167.8 ——> 1.678 * 10^2
101.1 ——> 1.011 * 2^2
看一下形式, (-1)^S * M * 2^E
此时我们的M=1.011 ,E=2 ,还差
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值