看这个简单的程序:
#include <iostream>
using namespace std;
int main()
{
unsigned int i=0x3f800000;
float* p=(float*)(&i);
float f=*p;
cout<<f;
}
这是我对程序的期望:
f
。 f
是p
指向的值。 p
指向名为i
的变量的地址中的值。 (即为i
的值)i
是0x3f800000
因此,我希望在输出中看到
0x3f800000
,但是它将打印1
。为什么?ap1019@sharifvm:~$ ./a.out
1
ap1019@sharifvm:~$
最佳答案
您所做的是reinterpret_cast
指向int
的指针,该指针指向float
的指针,并通过转换后的指针检索了float
值。
通常,这是未定义的行为,但是在您的计算机上,int
和float
具有相同的大小,并且代表int
值0x3f800000
的字节也代表float
值1
。
关于c++ - 将4字节的int解释为4字节的float,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29847288/