【发布时间】:2012-04-30 15:53:13
【问题描述】:
我在 GCC 4.4.1 中使用 Code::Blocks,但我似乎无法从我的 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
我错过了什么吗?
【问题讨论】:
-
this question 的可能重复项。
-
第二个printf怎么不对?啊,我现在在例子中看到了。没关系。该示例在 Linux 上为我打印出正确的值。
-
@npclaudiu - 谢谢。我从那里得到的!
-
%lld和%llx是打印long long类型值的正确格式指令(在 C99 中)。如果它不起作用,则说明安装中有问题,例如库不匹配或损坏。 -
对于仍在考虑使用 GCC 4.4.1 的任何人 - 该编译器现在已经有 10 多年的历史了,在提出问题时已经 2.5 年了 :)
标签: c gcc codeblocks