c++ - 为什么在 C++ 中,如果数字恒定或不变,负数的 static_cast<unsigned> 会有所不同

标签 c++ casting

表示等于的C++规则是什么?鉴于:

float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));

例如https://godbolt.org/z/fcmx2P

#include <iostream>

int main() 
{
          float   f {-1.0};
    const float  cf {-1.0};

    std::cout << std::hex;
    std::cout << " f" << "=" << static_cast<unsigned>(f) << '\n';
    std::cout << "cf" << "=" << static_cast<unsigned>(cf) << '\n';

    return 0;
}

产生以下输出:

 f=ffffffff
cf=0

最佳答案

您的程序的行为未定义:C++ 标准没有定义负浮点类型无符号类型的转换.

(请注意,熟悉的环绕行为仅适用于负积分类型。)

因此,尝试解释程序输出没有什么意义。

关于c++ - 为什么在 C++ 中,如果数字恒定或不变,负数的 static_cast<unsigned> 会有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58919064/

相关文章:

java:如何将变量从一种类型动态转换为另一种类型?

c++ - 指向指针 vector 的指针的内存消耗

c++ - 无法将 uint8_t vector 迭代器转换为 const uint8_t *

c++ - 访问从成员函数返回的私有(private)嵌套类

c++ - 当检查是eof时,使用getline读取文本文件会导致无限循环

c++ - 将 unsigned short* 转换为 int*

arrays - Swift - 如何将 Any 转换为 Array\Dictionary?

c - 使用简单整数和内存大小的正确方法

c++ - 如何在 OpenGL(使用 GLUT)上绘制像圆锥体一样的填充包络?

android - 使用 Xamarin 的 NDK Android 应用程序中的 DllNotFoundException