Grundlagen der Programmiersprache C

unsigned int reg = 0x04;
if (reg & 0x04 == 0x04)
    printf("ON\n");
else
    printf("OFF\n");

Der obige Code soll prüfen, ob Bit 2 des Registerwerts reg gleich 1 ist. Was ergibt die Ausführung?

  1. AON wird ausgegeben
  2. BOFF wird ausgegeben
  3. C& und == dürfen nicht direkt hintereinander stehen, daher entsteht ein Kompilierfehler
Antwort und Erläuterung anzeigen

Antwort: B. OFF wird ausgegeben

In C hat der Vergleichsoperator == eine höhere Priorität als das bitweise UND &. Die Bedingung wird daher als reg & (0x04 == 0x04) gelesen; 0x04 == 0x04 ergibt 1, also 0x04 & 1 = 0, die Bedingung ist falsch, und OFF wird ausgegeben. Wie beabsichtigt funktioniert es mit Klammern: (reg & 0x04) == 0x04. Syntaktisch ist der Code korrekt, daher gibt es keinen Fehler, aber gcc warnt mit -Wall.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. uint8_t ist ein vorzeichenloser 8-Bit-Ganzzahltyp. Welche Ausgabe erzeugt der obige Code bei der Ausführung?
  2. uint8_t ist ein vorzeichenloser 8-Bit-Ganzzahltyp. Welche Ausgabe erzeugt der obige Code, der x zehnmal erhöht, bei der Ausführung?
  3. unsigned char habe 8 Bit und int 32 Bit. Welche Ausgabe erzeugt der obige Code bei der Ausführung?
  4. uint8_t sei ein vorzeichenloser 8-Bit-Ganzzahltyp und int habe 32 Bit. Was ergibt die Ausführung des obigen Codes?
  5. int und unsigned int haben 32 Bit. Was ergibt die Ausführung des obigen Codes?