-2147483648 ist die kleinste Ganzzahl für den Ganzzahltyp mit 32 Bit, aber es scheint, dass sie im if(...)
Satz überläuft :
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
Dies wird true
in meinen Tests gedruckt . Wenn wir jedoch -2147483648 in eine Ganzzahl umwandeln, ist das Ergebnis anders:
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
Dies wird gedruckt false
.
Ich bin verwirrt. Kann jemand eine Erklärung dazu geben?
Update 02-05-2012:
Vielen Dank für Ihre Kommentare. In meinem Compiler beträgt die Größe von int 4 Byte. Ich benutze VC für einige einfache Tests. Ich habe die Beschreibung in meiner Frage geändert.
Das sind viele sehr gute Antworten in diesem Beitrag. AndreyT hat sehr ausführlich erklärt, wie sich der Compiler bei solchen Eingaben verhält und wie diese minimale Ganzzahl implementiert wurde. qPCR4vir gab andererseits einige verwandte "Kuriositäten" an und wie Ganzzahlen dargestellt werden. Sehr beeindruckend!
INT_MIN
von haben -9223372036854775808
, wenn sie CHAR_BIT
16 ist. Und selbst mit CHAR_BIT == 8
und sizeof(int
== 4) `erhalten Sie möglicherweise, -9223372036854775807
weil C keine 2-Komplement-Zahlen benötigt.