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?
- AON wird ausgegeben
- BOFF wird ausgegeben
- 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.
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C