Cómo establecer, borrar y cambiar un bit individual en C++?
¡Hola! Estoy escribiendo un programa para un microcontrolador en C++ y trabajo con registros. Necesito gestionar bits individuales: establecerlos en 1, borrarlos a 0 y cambiarlos (invertir). Sé que esto se hace con operaciones de bits, pero siempre me confundo con la sintaxis.
Por ejemplo, tengo una variable `uint8_t flags = 0b00001111;`. Quiero:
1. Establecer el bit 3 (contando desde cero) en 1.
2. Borrar el bit 2 a 0.
3. Cambiar el bit 1 (si 1 → 0, si 0 → 1).
Por ahora lo hago así:
```cpp
uint8_t flags = 0b00001111;
// Establecer bit 3
flags = flags | 0b00001000; // Funciona, pero es incómodo
// Borrar bit 2
flags = flags & 0b11111011; // Siempre me equivoco en la máscara
// Cambiar bit 1
flags = flags ^ 0b00000010; // Parece que funciona
```
Preguntas:
- ¿Existen macros o funciones estándar para esto?
- ¿Cómo se numeran correctamente los bits (desde cero o desde uno)?
- ¿Se puede evitar el cálculo manual de las máscaras?
Leí en Stack Overflow, pero los ejemplos son en C, y necesito