我正在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大得多的值。
为什么?
最佳答案
字母100000000000组成一个文字整数常量,但是对于int
类型而言,该值太大。您需要使用后缀来更改文字的类型,即
long long num3 = 100000000000LL;
后缀
LL
使文字变成long long
类型。 C不够“聪明”,无法从左侧的类型得出结论,该类型是文字本身的属性,而不是使用它的上下文。关于c++ - 在C/C++中很久很久,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1458923/