C语言之数据在内存中的存储(2),浮点数在内存中的存储

07-17 1402阅读


目录

前言

一、引例

二、浮点型在内存中的存储

三、浮点数在内存中的存和取过程

1.浮点数的存储过程

2.浮点数的取过程

四、引例解析

总结


C语言之数据在内存中的存储(2),浮点数在内存中的存储


前言

        想知道浮点数在内存中是如何存储的吗,本文就告诉你答案,虽然一般情况题目还是面试涉及到浮点数在内存中的存储很少,但是了解其存储机制有利于加深我们对C语言的理解,修炼我们的内功。


❤️感谢支持,点赞关注不迷路❤️


 

 

一、引例

我们看以下代码:

#include 
int main()
{
	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);
	return 0;
}

运行结果:

C语言之数据在内存中的存储(2),浮点数在内存中的存储

发现:我们观察到,将整数9以浮点型打印时为0.000000,将浮点型9.0以整形打印时是一个较大的数字。这一点就可以说明整形与浮点型在内存中的存储形式是不同的。


二、浮点型在内存中的存储

我们知道整数在内存中是以补码的形式储存的,那么浮点数是怎么存储的呢?

根据国际标准IEEE(电气和电子工程协会)754,任意一个⼆进制浮点数V可以表示成下面的形式:

C语言之数据在内存中的存储(2),浮点数在内存中的存储

举例:浮点数5.5用以上形式如何表示:

  1. 首先5.5翻译成二进制为 101.1。
  2. 然后就可以改写成以下形式:
  3. C语言之数据在内存中的存储(2),浮点数在内存中的存储
  4. 这时候,M就是1.011,E就是2,S自然为0

然后,只需要将S、M、E这三个数存储到内存中,就可以储存一个浮点数了,那么这三个数是如何在内存中存放的呢?

IEEE 754规定:

  • 对于32位的浮点数(float),最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数
  • 字M 对于64位的浮点数(double),最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M

    C语言之数据在内存中的存储(2),浮点数在内存中的存储

    C语言之数据在内存中的存储(2),浮点数在内存中的存储

    注意:不管怎样,内存中存储的还是补码


      

    三、浮点数在内存中的存和取过程

    1.浮点数的存储过程

    IEEE 754对有效数字M和指数E,还有一些特别规定。

    M的存储过程:前面用101.1举例,可以写成类似科学计数法的形式。1

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]