Avatar ·

Cómo establecer, limpiar y alternar un bit individual en C++

¡Hola a todos! Soy un desarrollador principiante de C++ y me encontré con un problema al trabajar con bits. Necesito manipular bits individuales en un número entero, pero no puedo entender cómo hacerlo correctamente.

Tengo una variable uint8_t flags = 0b00000000;. Quiero:

  • Establecer el 3er bit (ponerlo en 1)
  • Limpiar el 5to bit (ponerlo en 0)
  • Alternar el 2do bit (invertir su valor)

Intenté escribir este código:

uint8_t flags = 0b00000000;
// Establecer el 3er bit
flags = flags | 3;  // Pero esto no funciona
// Limpiar el 5to bit
flags = flags & 5;  // Tampoco es correcto
// Alternar el 2do bit
flags = flags ^ 2;  // Parece que funciona, pero no estoy seguro

El problema es que no entiendo cómo especificar correctamente el número de bit. Cuando escribo flags | 3, pensé que esto establecería el 3er bit, pero aparentemente no funciona así. He leído sobre máscaras de bits, pero me confundí con ellas.

Por favor, indíquenme cómo hacerlo correctamente.