我的代码是这个(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
现在,我迷路了。我做错了什么?
答案 0 :(得分:7)
UINT64_MAX
的值应为0xffffffffffffffff
,因为这是64位全部设置的值。我不明白为什么你期望0x10000000000000000
(需要 65位代表)。
小数中的18446744073709551615
等于0xffffffffffffffff
,因此printf正在做正确的事。