Wie setzt, löscht und toggelt man ein einzelnes Bit in C++?
Hallo! Ich schreibe ein Programm für einen Mikrocontroller in C++ und arbeite mit Registern. Ich muss einzelne Bits steuern: sie auf 1 setzen, auf 0 löschen und toggeln (invertieren). Ich weiß, dass dies mit bitweisen Operationen gemacht wird, aber ich verwechsle ständig die Syntax.
Zum Beispiel habe ich eine Variable `uint8_t flags = 0b00001111;`. Ich möchte:
1. Bit 3 (von Null aus gezählt) auf 1 setzen.
2. Bit 2 auf 0 löschen.
3. Bit 1 toggeln (wenn 1 → 0, wenn 0 → 1).
Bisher mache ich es so:
```cpp
uint8_t flags = 0b00001111;
// Bit 3 setzen
flags = flags | 0b00001000; // Funktioniert, aber unbequem
// Bit 2 löschen
flags = flags & 0b11111011; // Ich mache ständig Fehler in der Maske
// Bit 1 toggeln
flags = flags ^ 0b00000010; // Scheint zu funktionieren
```
Fragen:
- Gibt es allgemein übliche Makros oder Funktionen dafür?
- Wie nummeriert man Bits richtig (von Null oder von Eins)?
- Kann man irgendwie vermeiden, Masken manuell zu berechnen?
Ich habe auf Stack Overflow gelesen, aber dort sind die Beispiele in C, ich brauche