类型转换引发的思考

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37806112/article/details/82790533

题目:

下面 程序的结果是多少?

#include <iostream>
using namespace std;
int main()
{
	float a = 1.0f;
	cout << (int)a << endl;
	cout << &a << endl;
	cout << (int&)a << endl;
	cout << ((int)a==(int&)a) << endl;

	return 0;
}

 结果:

    cout << ((int)a==(int&)a) << endl;   //0

 分析:

    首先这道题结果很困惑,更让人困惑的是(int &) 是什么东东

    引用相当于c语言里的指针,(int&)a    等同于  int *p=(int *)&a;  第一个&是引用 ,第二个&是取地址

   意思是:p是指向int型a的地址空间,原先a的地址空间是float类型。

   先解释一下(int)a 和 (int&)a 有啥区别:

   其实它们的过程是不一样的,我们以上面float a = 1.0f为例,对于(int)a,首先我们先以浮点类型将数据取出,它是1.0,然后再进行int类型转换,将1.0转换为1。

   而(int&)a)我们可以把它看成 int *p=(int *)&a,直接将a的那边内存以整型读取。

根本原因:

   int类型在内存中的存储方式和浮点数在内存中的存储方式不同,int类型在内存中,是以补码的形式存储;而浮点数是以符号位+阶码+尾数的形式。

    具体解释可以看int在内存中的存储方式 

                             浮点数在内存中的存储方式

猜你喜欢

转载自blog.csdn.net/m0_37806112/article/details/82790533