【发布时间】:2010-11-30 08:15:15
【问题描述】:
我正在 GNU 的 C++ 编译器上尝试此代码,但无法理解其行为:
#include <stdio.h>;
int main()
{
int num1 = 1000000000;
long num2 = 1000000000;
long long num3;
//num3 = 100000000000;
long long num4 = ~0;
printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3));
printf("%d %ld %lld %llu", num1, num2, num3, num4);
return 0;
}
当我取消注释注释行时,代码无法编译并给出错误:
错误:整数常量对于长类型来说太大
但是,如果代码按原样编译并执行,它会产生远大于 10000000000 的值。
为什么?
【问题讨论】:
-
现在可能为时已晚,但对于未来的读者,我建议您使用
<stdint.h>并使用uint64_t。要显示 64 位值,printf( "%" PRIu64 "\n", val); -
@morticgeek
<stdint.h>包括在内,uint64_t a = 0xffffffffffffff; printf( "%" PRIu64 "\n",a ); : error: expected ‘)’ before ‘PRIu64’ printf( "%" PRIu64 "\n",a ); :: warning: spurious trailing ‘%’ in format [-Wformat=] printf( "%" PRIu64 "\n",a ); -
#define __STDC_FORMAT_MACROS 1见stackoverflow.com/questions/14535556/…
标签: c++ types long-integer