Grundlagen der Programmiersprache C
int a = -1;
unsigned int b = 1;
if (a < b)
printf("a < b\n");
else
printf("a >= b\n");int und unsigned int haben 32 Bit. Was ergibt die Ausführung des obigen Codes?
- Aa < b wird ausgegeben
- Ba >= b wird ausgegeben
- CVorzeichenbehaftete und vorzeichenlose Werte lassen sich nicht vergleichen, daher entsteht ein Kompilierfehler
Antwort und Erläuterung anzeigen
Antwort: B. a >= b wird ausgegeben
Beim Vergleich von int und unsigned int werden beide Werte zuerst in unsigned int umgewandelt (übliche arithmetische Konvertierungen). −1 wird als unsigned int zu 2³² − 1 = 4294967295, ist also größer als 1, und a < b ist falsch. Deshalb wird „a >= b“ ausgegeben. Bei Vergleichen, die vorzeichenbehaftete und vorzeichenlose Werte mischen, warnt gcc mit -Wextra (oder -Wsign-compare).
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C