看这个简单的程序:

#include <iostream>
using namespace std;

int main()
{
unsigned int i=0x3f800000;
float* p=(float*)(&i);
float f=*p;
cout<<f;
}

这是我对程序的期望:
  • 最后一行:我们必须在输出中看到f
  • 上一个:fp指向的值。
  • 上一个:p指向名为i的变量的地址中的值。 (即为i的值)
  • i0x3f800000

  • 因此,我希望在输出中看到0x3f800000,但是它将打印1。为什么?
    ap1019@sharifvm:~$ ./a.out
    1
    ap1019@sharifvm:~$
    

    最佳答案

    您所做的是reinterpret_cast指向int的指针,该指针指向float的指针,并通过转换后的指针检索了float值。

    通常,这是未定义的行为,但是在您的计算机上,intfloat具有相同的大小,并且代表int0x3f800000的字节也代表float1

    关于c++ - 将4字节的int解释为4字节的float,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29847288/

    10-11 23:12
    查看更多