Technische Informatik; Hardwarenahe Programmierung
Hilfestellung
Der übliche Ausdruck, mit dem man Probleme zu haben scheint, ist "(1 << position)". Alles was dies bewirkt ist, eine Maske mit einem einzelnen Bit zu erstellen, die mit jedem Integer-Typ funktioniert. Das Argument "position" gibt die Position an, an der das Bit sein soll. Wenn position = 0 ist, ergibt dieser Ausdruck:
0b0000 0000 0000 0000 0000 0000 0000 0001
Wenn position = 8, wird ausgewertet:
0b0000 0000 0000 0000 0000 0001 0000 0000
Mit anderen Worten, es wird einfach ein Nullenfeld mit einer 1 an der angegebenen Position erstellt.
Sobald die Maske erstellt ist, wird sie den Operatoren bitweise und (&) oder (|) und xor (^) auf das Argument angewendet.
Achtung!
auf die Datentypen: uint8_t, char, short, int oder long.
Der GCC bzw. alle Compiler die darauf beruhen, wie der von Mbed können für binäre Konstante die GCC Extension, die im C++14 Standard enthalten ist, verwenden:
uint8_t x = 0b00010000;
Weitere Anwendungen (wobei in C/C++ häufig Kombinierte Zuweisungen verwendet werden:
lösche das 3. Bit:
x &= ~(1<<3) // x = x anded with the inverse of (0x01 shifted left 3 times)
setze das 5. und 7. Bit
// x = x ored with (0x01 shifted left 5 times) ored with (0x01 shifted left 7 times) x |= (1 << 5) | (1 << 7);
überprüfe das 2. Bit og es 1 ist
if (x & (1<<2)) { ... }
Das obige nutzt die C-Eigenschaft aus, dass 0 false ist, alles andere ist true. Wenn es schwer fällt, dem zu folgen, kann immer folgendes verwendet werden:
if ( (x & (1<<2)) == (1<<2)) // if x anded with 0x02 == 0x02 { ... }