Como definir, limpar e alternar um bit individual em C++?
Olá! Estou escrevendo um programa para microcontrolador em C++ e trabalhando com registradores. Preciso gerenciar bits individuais: defini-los como 1, limpá-los para 0 e alterná-los (inverter). Sei que isso é feito com operações bit a bit, mas sempre me confundo com a sintaxe.
Por exemplo, tenho uma variável `uint8_t flags = 0b00001111;`. Quero:
1. Definir o 3º bit (contando a partir de zero) como 1.
2. Limpar o 2º bit para 0.
3. Alternar o 1º bit (se 1 → 0, se 0 → 1).
Atualmente faço assim:
```cpp
uint8_t flags = 0b00001111;
// Definir bit 3
flags = flags | 0b00001000; // Funciona, mas é inconveniente
// Limpar bit 2
flags = flags & 0b11111011; // Sempre erro na máscara
// Alternar bit 1
flags = flags ^ 0b00000010; // Parece funcionar
```
Perguntas:
- Existem macros ou funções padrão amplamente aceitas para isso?