-2147483648 - это наименьшее целое число для целочисленного типа с 32 битами, но кажется, что оно будет переполнено в if(...)
предложении:
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
Это напечатает true
в моем тестировании. Однако, если мы приведем -2147483648 к целому числу, результат будет другим:
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
Это напечатает false
.
Я запутался. Кто-нибудь может дать объяснение по этому поводу?
Обновление 02-05-2012:
Спасибо за ваши комментарии, в моем компиляторе размер int составляет 4 байта. Я использую VC для простого тестирования. Я изменил описание в моем вопросе.
Это очень много хороших ответов в этом посте. AndreyT дал очень подробное объяснение того, как компилятор будет вести себя при таком вводе, и как реализовано это минимальное целое число. qPCR4vir, с другой стороны, дал некоторые связанные «курьезы» и то, как представлены целые числа. Так впечатляет!
INT_MIN
о -9223372036854775808
, если CHAR_BIT
есть 16. И даже CHAR_BIT == 8
и sizeof(int
== 4) `вы можете получить , -9223372036854775807
потому что C не требуется 2-комплемента номера.