-2147483648 è il numero intero più piccolo per il tipo intero con 32 bit, ma sembra che trabocchi nella if(...)
frase:
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
Questo verrà stampato true
nei miei test. Tuttavia, se eseguiamo il cast di -2147483648 in numero intero, il risultato sarà diverso:
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
Questo stamperà false
.
Non ho capito bene. Qualcuno può dare una spiegazione al riguardo?
Aggiornamento 02-05-2012:
Grazie per i tuoi commenti, nel mio compilatore, la dimensione di int è di 4 byte. Sto usando VC per alcuni semplici test. Ho cambiato la descrizione nella mia domanda.
Sono molte le risposte molto buone in questo post, AndreyT ha fornito una spiegazione molto dettagliata su come il compilatore si comporterà su tale input e su come questo intero minimo è stato implementato. qPCR4vir d'altra parte ha dato alcune "curiosità" correlate e come sono rappresentati i numeri interi. Così impressionante!
INT_MIN
di -9223372036854775808
, se CHAR_BIT
è 16. E anche con CHAR_BIT == 8
e sizeof(int
== 4) `potresti ottenere -9223372036854775807
perché C non richiede numeri a 2 complementi.