如何在GCC 4.4.1中打印64位整数?

时间:2012-04-19 06:44:12

标签: c gcc codeblocks

我正在使用Code::Blocks和GCC 4.4.1,我似乎无法从我的C代码中打印64位有符号整数。

此代码:

long long longint;

longint = 0x1BCDEFABCDEFCDEF; /* 2003520930423229935 */
printf("Sizeof: %d-bit\n", sizeof(longint) * 8);     /* Correct */
printf("%llx\n", longint);                           /* Incorrect */
printf("%x%x\n", *(((int*)(&longint))+1), longint);  /* Correct */
printf("%lld\n", longint);                           /* Incorrect */ 

产生输出:

Sizeof: 64-bit
cdefcdef
1bcdefabcdefcdef
-839922193

64位算术似乎正常工作:

longint -= 0x1000000000000000;
printf("%x%x\n", *(((int*)(&longint))+1), longint);

给出:

bcdefabcdefcdef

我错过了什么吗?

5 个答案:

答案 0 :(得分:9)

要(在C99及以上)可移植地打印64位整数,您应该#include <inttypes.h>并使用C99宏PRIx64PRId64。这将使你的代码;

printf("Sizeof: %d-bit\n", sizeof(longint) * 8);
printf("%" PRIx64 "\n", longint);
printf("%" PRId64 "\n", longint);

修改:有关更多示例,请参阅this question

答案 1 :(得分:8)

查看%I64d是否对您有所帮助。 %lld适用于long long int,但有时在Windows IDE上会有所不同

答案 2 :(得分:4)

这取决于操作系统。如果您在任何使用GLIBC的GCC上执行此操作,则%llx可以正常工作。

但是,如果您使用mingw编译器,那么它使用Microsoft库,您需要查看他们的documentation

这会将您的计划更改为:

longint = 0x1BCDEFABCDEFCDEFLL; /* 2003520930423229935 */
printf("Sizeof: %d-bit\n", sizeof(longint) * 8);     /* Correct */
printf("%I64x\n", longint);                           /* Incorrect */
printf("%x%x\n", *(((int*)(&longint))+1), longint);  /* Correct */
printf("%I64d\n", longint);

答案 3 :(得分:0)

终于明白了:

longint = 0x1BCDEFABCDEFCDEF; /* 2003520930423229935 */
printf("%I64d\n", longint);
printf("%I64x\n", longint);

打印:

2003520930423229935
1bcdefabcdefcdef

谢谢@npclaudiu!

答案 4 :(得分:0)

longint = 0x1BCDEFABCDEFCDEF; / * 2003520930423229935 * / 您可以打印为-

printf(“%llx”,longint);