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

Fen*_*kso 13 c gcc codeblocks

我正在使用Code :: Blocks with 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 */ 
Run Code Online (Sandbox Code Playgroud)

产生输出:

Sizeof: 64-bit
cdefcdef
1bcdefabcdefcdef
-839922193
Run Code Online (Sandbox Code Playgroud)

64位算术似乎正常工作:

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

得到:

bcdefabcdefcdef
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Pav*_*ath 10

看看是否有%I64d帮助.%lld很好,long long int但有时在Windows IDE上会有所不同


Joa*_*son 9

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

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

编辑:有关更多示例,请参阅此问题.

  • 这些是`int64_t`的技术格式,如果恰好与`long long`不同.当然,他们有可能在现有的破碎/不完全C99仍在系统上工作*.:-) (2认同)

dbr*_*nk0 6

这取决于操作系统。如果您在几乎任何使用 GLIBC 的 GCC 上执行此操作,那么 %llx 就可以工作。

但是,如果您使用的是 mingw 编译器,那么这将使用 Microsoft 库,您需要查看他们的文档

这会将您的程序更改为:

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);
Run Code Online (Sandbox Code Playgroud)