Vergleiche int und unsigned int

8

Wenn man int x mit unsigned int y vergleichen muss, ist das sicherer / besser / schöner in C99 und mit gcc 4.4+ :

  1. (unsigned int)x == y
  2. x == (int)y

Spielt das eine Rolle?

    
Cartesius00 22.11.2011, 20:12
quelle

2 Antworten

16

Am sichersten ist es zu überprüfen, ob die Zahl vor dem Casting in Reichweite ist:

%Vor%     
Mark Byers 22.11.2011, 20:14
quelle
7

Ja, es ist wichtig.

Auf einer Plattform mit 32bit int mit z. B.

%Vor%

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 .

    
undur_gongor 22.11.2011 20:28
quelle

Tags und Links