Wenn man int x
mit unsigned int y
vergleichen muss, ist das sicherer / besser / schöner in C99
und mit gcc 4.4+
:
(unsigned int)x == y
x == (int)y
Spielt das eine Rolle?
Am sichersten ist es zu überprüfen, ob die Zahl vor dem Casting in Reichweite ist:
%Vor%Ja, es ist wichtig.
Auf einer Plattform mit 32bit int
mit z. B.
Der Ausdruck x == y
würde 1
ergeben, weil der Wert von x
durch die "üblichen arithmetischen Konvertierungen" in unsigned
und somit in 0xffffffff
umgewandelt wird.
Der Ausdruck (unsigned int)x == y
ist ebenfalls 1
. Der einzige Unterschied besteht darin, dass Sie die Konvertierung explizit mit einem Cast durchführen.
Der Ausdruck x == (int)y
wird höchstwahrscheinlich auch 1
sein, weil die Umwandlung von 0xffffffff
in int
auf den meisten Plattformen -1
ergibt (Zweierkomplement-Negative). Genau genommen ist dies implementierungsdefiniertes Verhalten und kann daher auf verschiedenen Plattformen variieren.
Beachten Sie, dass Sie in keinem Fall das "erwartete" Ergebnis 0
erhalten. Eine gute Implementierung finden Sie in der Antwort Mark Byers .