我有一个unsigned long long
(或uint64_t
)值,并想将其转换为double
。 double 型应具有与long
值相同的位模式。这样,我可以“手动”设置double的位。
unsigned long long bits = 1ULL;
double result = /* some magic here */ bits;
我正在寻找一种方法来做到这一点。
最佳答案
便携式的方法是使用memcpy
(您也可以有条件地使用reinterpret_cast
或并集来进行此操作,但是由于它们违反了严格别名规则的含义,因此不确定它们是可移植的):
// First, static assert that the sizes are the same
memcpy(&result, &bits, sizeof(bits));
但是在您做之前,请确保您确切地知道自己在做什么以及正在使用哪种浮点表示(尽管IEEE754是一种流行/常见的选择)。您将要避免各种问题值,例如无穷大,NaN和非正规数。