c++ - C/C++ 用十六进制初始化 double

标签 c++ double hex uint64

我想用十六进制常量初始化一个 double。

double dbl = 0xFEDCBA9876543212;
printf("dbl: %llX\n", (uint64_t)dbl);

我希望看到的输出是:

dbl: FEDCBA9876543212

但我得到:

dbl: FEDCBA9876543000

为什么会这样,为什么要丢弃最后 3 个字节?

最佳答案

您正在使用一个 64 位值来初始化一个 double 值,它只包含 53 个有效位。有一位四舍五入,剩下的位直接丢掉。

关于c++ - C/C++ 用十六进制初始化 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25923238/

相关文章:

c++ cygwin 和 eclipse - 找不到二进制错误

java - 如何在 Java 数学运算中使用 EditText 值 (numberDecimal)

c++ - 如何将十进制整数转换为十六进制整数?

Javascript生成随机的十六进制

c++ - dllexport'ing 静态模板方法

c++ - 为什么将 char 指针流式传输到 cout 不打印地址?

c++ - 不情愿地通过 RPC 调用 QueryInterface

c++ - 如何将 size_t 转换为 double 或 int C++

c++ - C/C++ 以一定的精度高效地四舍五入小数

c++ - 将短路的十六进制值分配给短路