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?

  1. Aa < b wird ausgegeben
  2. Ba >= b wird ausgegeben
  3. 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).

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. unsigned int habe 32 Bit. Wie verhält sich der obige Code bei der Ausführung?
  2. Ein Programm, das c aus „char c = 200;“ mit %d von printf ausgibt, zeigt nach dem Kompilieren mit gcc für Linux auf x86-64 den Wert −56, mit gcc für Linux auf Arm dagegen 200. Was ist der Grund für den Unterschied?
  3. Welche Ausgabe erzeugt der obige Code, in dem b++ rechts von && und || steht, bei der Ausführung?
  4. Welche Ausgabe erzeugt die obige switch-Anweisung, die ein case ohne break enthält, bei der Ausführung?
  5. Welche Ausgabe erzeugt das obige Programm bei der Ausführung?