(-2147483648> 0) gibt in C ++ true zurück?

-2147483648 ist die kleinste Ganzzahl für den Ganzzahltyp mit 32 Bit, aber es scheint, dass sie in der überläuftif(...) Satz:

if (-2147483648 > 0)
    std::cout << "true";
else
    std::cout << "false";

Dies wird gedruckttrue bei meinen tests. 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 gedrucktfalse.

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 Bytes. 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 gab eine sehr detaillierte Erklärung darüber, wie sich der Compiler bei solchen Eingaben verhält und wie diese minimale Ganzzahl implementiert wurde.qPCR4vir Auf der anderen Seite gaben einige verwandte "Kuriositäten" an und wie Integer dargestellt werden. Sehr beeindruckend!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage