Basis van programmeren in C
unsigned int reg = 0x04;
if (reg & 0x04 == 0x04)
printf("ON\n");
else
printf("OFF\n");De bovenstaande code is geschreven om te controleren of bit 2 van de registerwaarde reg 1 is. Wat is het resultaat als de code wordt uitgevoerd?
- AON wordt afgedrukt
- BOFF wordt afgedrukt
- CEr ontstaat een compileerfout, omdat & en == niet achter elkaar mogen staan
Antwoord en toelichting tonen
Antwoord: B. OFF wordt afgedrukt
In C heeft de vergelijking == een hogere voorrang dan de bitsgewijze EN &. De voorwaarde wordt dus gelezen als reg & (0x04 == 0x04); omdat 0x04 == 0x04 gelijk is aan 1, is het resultaat 0x04 & 1 = 0, wat onwaar is, en wordt OFF afgedrukt. Voor de bedoelde betekenis zijn haakjes nodig, zoals in (reg & 0x04) == 0x04. Grammaticaal is de code geldig, dus er ontstaat geen fout, maar gcc geeft met -Wall een waarschuwing.