-2147483648 est le plus petit entier pour le type entier avec 32 bits, mais il semble qu'il débordera dans la if(...)phrase:
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
Cela s'imprimera truedans mes tests. Cependant, si nous convertissons -2147483648 en entier, le résultat sera différent:
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
Cela s'imprimera false.
Je suis confus. Quelqu'un peut-il donner une explication à ce sujet?
Mise à jour 02-05-2012:
Merci pour vos commentaires, dans mon compilateur, la taille de int est de 4 octets. J'utilise VC pour des tests simples. J'ai changé la description dans ma question.
C'est beaucoup de très bonnes réponses dans ce post, AndreyT a donné une explication très détaillée sur la façon dont le compilateur se comportera sur une telle entrée, et comment cet entier minimum a été implémenté. qPCR4vir , d'autre part, a donné quelques "curiosités" et comment les nombres entiers sont représentés. Tellement impressionnant!
INT_MINde -9223372036854775808, siCHAR_BIT est 16. Et même avec CHAR_BIT == 8et sizeof(int== 4) `vous pouvez obtenir -9223372036854775807parce que C ne nécessite pas de nombres à 2 compléments.