我正在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);