Embedded Systems und Firmware
Der obige Code ändert ein Einstellungsfeld mit mehreren Bits des Registers reg. Was tut er?
reg = (reg & ~(0x7 << 4)) | (5 << 4);
- AEr setzt nur Bit 5 auf 1
- BEr löscht das 3-Bit-Feld der Bits 4 bis 6 auf 0 und schreibt dann 5 (binär 101) hinein
- CEr multipliziert den Wert von reg mit 5 und schiebt ihn um 4 Bit nach links
Antwort und Erläuterung anzeigen
Antwort: B. Er löscht das 3-Bit-Feld der Bits 4 bis 6 auf 0 und schreibt dann 5 (binär 101) hinein
0x7 ist binär 111, daher ist „0x7 << 4“ eine Maske, in der die Bits 4 bis 6 gleich 1 sind. UND mit ihrer Negation löscht das Feld auf 0, und ODER mit „5 << 4“ (101 in den Bits 4 bis 6) ändert nur das Feld auf 5, während die übrigen Bits unverändert bleiben. Das ist die Grundform zum Umschreiben von Registern, in denen mehrere Bits eine Einstellung bilden, etwa Betriebsmodus oder Teilerverhältnis.