долго долго в C / C ++

Я пытаюсь этот код на GNU 'Компилятор C ++ и я не могу понять его поведение:

#include ;

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;
}

Когда я раскомментирую закомментированную строку, код неt компилируется и выдает ошибку:

ошибка: целочисленная константа слишком велика для типа long

Но если код скомпилирован как есть и выполняется, он выдает значения, значительно превышающие 10000000000.

Зачем?

Ответы на вопрос(4)

Ваш ответ на вопрос