我正在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/

10-11 17:03