Ответ 1
Вы должны использовать %ld
для печати long int
и %lld
для печати long long int
.
Обратите внимание, что только long long int
гарантированно будет достаточно большим, чтобы сохранить результат этого вычисления (или, действительно, вводимые значения, которые вы используете).
Вам также необходимо убедиться, что вы используете свой компилятор в C99-совместимом режиме (например, используя параметр -std=gnu99
для gcc). Это связано с тем, что тип long long int
не вводился до C99; и хотя многие компиляторы реализуют long long int
в режиме C90 в качестве расширения, константа 2147483648
может иметь тип unsigned int
или unsigned long
в C90. Если это имеет место в вашей реализации, то значение -2147483648
также будет иметь неподписанный тип и поэтому будет положительным, и общий результат будет не тем, что вы ожидаете.