无符号长-长变量的值为十六进制的"40 36 70 A3 D7 0A 3D 71
"。如果我使用%f
转换说明符打印它,我将从IEEE-754获得正确的转换。即使我丢失了一些小数,我如何将此变量强制转换为浮动1或int
?
我试过选它,但它给了我不好的价值观。此处示例:
unsigned long long hex = 0x403670A3D70A3D71;
float cast_float = (float)hex;
假设unsigned long long
变量包含一个有效的double
值,则可以使用类型punning,例如使用unions:
union
{
unsigned long long i;
double f;
} value = { .i = 0x403670A3D70A3D71 };
printf("0x%llx is %fn", value.i, value.f);
请注意,如果整数中的值与系统上的有效双精度浮点值具有相同的位模式,则这仅是有效的。否则,它可能导致未定义的行为。
现在,如果您想将其转换为int
值22
(因为0x403670A3D70A3D71
是double
值22.44
的二进制表示(,那么您首先需要使用类型punning来获得浮点值,然后使用floor
函数将其截断为整数值(但仍为浮点类型(,最后将其转换成int
:
int int_val = (int) floor(value.f);