ISO C99 intypes.h:printf不打印uint64_t的十六进制值

时间:2010-11-09 04:00:51

标签: c

我的代码是这个(main.c):

#include <inttypes.h>
#include <stdio.h>


int
main(int argc, char **argv)
{
 uint64_t n;

 n = UINT64_MAX;

 printf("%" PRIX64 " %" PRIu64 "\n", n, n);

 return 0;
}

程序的输出是:

FFFFFFFFFFFFFFFF 18446744073709551615

但我正在寻找这个:

10000000000000000 18446744073709551615

我正在使用GCC(gcc -std = c99 main.c): gcc(Ubuntu / Linaro 4.4.4-14ubuntu5)4.4.5

在谷歌寻找答案给了我这个: http://bytes.com/topic/c/answers/565055-convert-64-integer-hex-octet-string

现在,我迷路了。我做错了什么?

1 个答案:

答案 0 :(得分:7)

UINT64_MAX的值应为0xffffffffffffffff,因为这是64位全部设置的值。我不明白为什么你期望0x10000000000000000(需要 65位代表)。

小数中的18446744073709551615等于0xffffffffffffffff,因此printf正在做正确的事。