-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-допоміжні числа.