📜  在C / C++中为浮点数和比较赋一个整数

📅  最后修改于: 2021-05-25 22:22:18             🧑  作者: Mango

考虑下面的C++程序并预测输出。

#include 
using namespace std;
  
int main()
{
    float f = 0xffffffff;
    unsigned int x = 0xffffffff; // Value 4294967295
    if (f == x) 
        cout << "true";
    else 
        cout << "false";
    return 0;
}

如果编译器使用“ IEEE754 32位单浮点类型”,则上述程序的输出为false。如果我们定义:

float f = 0xffffffff;

我们基本上是在尝试为32位浮点数分配32位整数(有符号或无符号)。编译器首先将整数0xffffffff转换为最接近的32位浮点数,并且浮点数f的内存表示形式与整数0xffffffff不同。通过打印f和x可以看到上述值。

#include 
using namespace std;
  
int main()
{
    float f = 0xffffffff;
    unsigned int x = 0xffffffff; 
    cout << "f = " << f << endl;
    cout << "x = " << x << endl;
    return 0;
}

输出 :

f = 4.29497e+09
x = 4294967295

例如,即使我们直接复制内存,我们也有一个整数(值等于0xffffffff),然后复制内容(内存值)。由于IEEE754中的0xffffffff不是有效的浮点数,因此,如果将此无效表示形式与其自身进行比较,则它是不相等的。

unsigned int x = 0xffffffff;
memoryCopy(&f, &x, sizeof(x));
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”