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?

  1. AON wordt afgedrukt
  2. BOFF wordt afgedrukt
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. uint8_t is een 8-bits integertype zonder teken. Wat is de uitvoer als de bovenstaande code wordt uitgevoerd?
  2. uint8_t is een 8-bits integertype zonder teken. Wat is de uitvoer als de bovenstaande code, die x tien keer verhoogt, wordt uitgevoerd?
  3. unsigned char is 8 bits en int is 32 bits. Wat is de uitvoer als de bovenstaande code wordt uitgevoerd?
  4. uint8_t is een 8-bits integertype zonder teken en int is 32 bits. Wat is het resultaat als de bovenstaande code wordt uitgevoerd?
  5. int en unsigned int zijn 32 bits. Wat is het resultaat als de bovenstaande code wordt uitgevoerd?