我想设置/清除浮点数并在C++中加倍并打印出结果.我肯定会long long bits = *(long long*)&doubleVar;调用未定义的行为.我不确定是否将它放入工会也是正确的.如何在C++中获取/设置float和double的位而不会导致未定义的行为?
为了避免未定义的行为,您需要使用memcpy() 一种简单的方法来使用建议的模板std::bit_cast<to_type>(from_type from)
您可以在https://en.cppreference.com/w/cpp/numeric/bit_cast中获取包装此操作的模板(仅建议使用),并且易于使用:
double pun_me=3.0;
std::uint64_t ui64=my_namespace::bit_cast<uint64_t>(pun_me);
Run Code Online (Sandbox Code Playgroud)
将它放在一个单独的命名空间中是个好主意,这样你就不会在C++ 20中出现冲突.您可以随意修改任何内容并将其转换回来.