Ответ 1
Правила целочисленной константы в C состоят в том, что десятичная целочисленная константа имеет первый тип, в котором ее можно представить в: int
, long
, long long
.
2147483648
не вписывается в int
в вашу систему (максимальный int
в вашей системе 2147483647
), поэтому его тип - long
(или long long
в зависимости от вашей системы). Таким образом, вы вычисляете sizeof (long)
(или sizeof (long long)
в зависимости от вашей системы).
2147483647
является int
в вашей системе, и если вы добавите 1
в int
, он все равно будет int
. Итак, вы вычисляете sizeof (int)
.
Обратите внимание, что sizeof(2147483647+1)
вызывает поведение undefined в вашей системе как переполнение INT_MAX + 1
и переполнения целочисленных целых чисел undefined в C.
Обратите внимание, что хотя обычно 2147483647+1
вызывает поведение undefined в вашей системе (INT_MAX + 1
переполнения и переполнения целочисленных целых чисел - это поведение undefined в C), sizeof(2147483647+1)
не вызывает поведение undefined в качестве операнда sizeof
в этом случае не оценивается.