Ian*_*kel 1 c++ floating-point
假设我有一个整数:
unsigned long long int data = 4599331010119547059;
Run Code Online (Sandbox Code Playgroud)
现在我想将此数据转换为双精度。我基本上想更改类型,但保持这些位完全相同。对于给定的示例,浮点值是0.31415926536。
我怎样才能在 C++ 中做到这一点?我看到一些使用 Union 的方法,但许多人建议不要使用这种方法。
从 C++20 开始,您可以使用std::bit_cast:
std::bit_cast<double>(data)
Run Code Online (Sandbox Code Playgroud)
在 C++20 之前,您可以使用std::memcpy:
double d;
static_assert(sizeof d == sizeof data);
std::memcpy(&d, &data, sizeof d);
Run Code Online (Sandbox Code Playgroud)
请注意,结果将根据浮点表示形式(尽管 IEEE-754 无处不在)以及浮点和整数类型是否具有相同的字节序而有所不同。