Basis van programmeren in C

int a = -1;
unsigned int b = 1;
if (a < b)
    printf("a < b\n");
else
    printf("a >= b\n");

int en unsigned int zijn 32 bits. Wat is het resultaat als de bovenstaande code wordt uitgevoerd?

  1. Aa < b wordt afgedrukt
  2. Ba >= b wordt afgedrukt
  3. CEr ontstaat een compileerfout, omdat waarden met en zonder teken niet kunnen worden vergeleken
Antwoord en toelichting tonen

Antwoord: B. a >= b wordt afgedrukt

Als een int en een unsigned int worden vergeleken, worden ze eerst allebei naar unsigned int omgezet (de gebruikelijke rekenkundige conversies). Als unsigned int wordt −1 gelijk aan 2³² − 1 = 4294967295, wat groter is dan 1, dus a < b is onwaar. Daarom wordt „a >= b” afgedrukt. Met -Wextra (of -Wsign-compare) geeft gcc een waarschuwing voor vergelijkingen die waarden met en zonder teken mengen.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. unsigned int is 32 bits. Welke beschrijving van het gedrag bij het uitvoeren van de bovenstaande code is juist?
  2. Een programma dat „char c = 200;” instelt en c met %d in printf afdrukt, gaf −56 na compileren en uitvoeren met gcc voor Linux op x86-64, en 200 met gcc voor Linux op Arm. Wat is de reden voor dit verschil?
  3. Wat is de uitvoer als de bovenstaande code, met b++ aan de rechterkant van && en ||, wordt uitgevoerd?
  4. Wat is de uitvoer als het bovenstaande switch-statement, met een case zonder break, wordt uitgevoerd?
  5. Wat is de uitvoer als het bovenstaande programma wordt uitgevoerd?