-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 true
dans 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_MIN
de -9223372036854775808
, siCHAR_BIT
est 16. Et même avec CHAR_BIT == 8
et sizeof(int
== 4) `vous pouvez obtenir -9223372036854775807
parce que C ne nécessite pas de nombres à 2 compléments.