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?
- Aa < b wordt afgedrukt
- Ba >= b wordt afgedrukt
- 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.