【发布时间】:2013-05-25 07:45:53
【问题描述】:
为什么用于取消引用传递给 printf 的指针的类型会影响输出,即使类型大小相同:
void test_double(void *x)
{
double *y = x;
uint64_t *z = x;
printf("double/double: %lf\n", *y);
printf("double/uint64: %lf\n", *z);
printf("uint64/double: 0x%016llx\n", *y);
printf("uint64/uint64: 0x%016llx\n", *z);
}
int main(int argc, char** argv)
{
double x = 1.0;
test_double(&x);
return 0;
}
输出:
double/double: 1.000000
double/uint64: 1.000000
uint64/double: 0x00007f00e17d7000
uint64/uint64: 0x3ff0000000000000
我希望最后两行都能正确打印 0x3ff0000000000000,即 IEEE754 双浮点中 1.0 的表示。
【问题讨论】:
-
您在什么平台上使用哪个编译器? Cygwin 下的 Gcc 4.5.3 为我打印 0x3ff0..0。