Avatar ·

Como definir, limpar e alternar um bit individual em C++?

Olá a todos! Sou um desenvolvedor C++ iniciante e encontrei um problema ao trabalhar com bits. Preciso gerenciar bits individuais em um número inteiro, mas não consigo entender como fazer isso corretamente.

Tenho uma variável uint8_t flags = 0b00000000;. Quero:

  • Definir o 3º bit (torná-lo 1)
  • Limpar o 5º bit (torná-lo 0)
  • Alternar o 2º bit (inverter seu valor)

Tentei escrever o seguinte código:

uint8_t flags = 0b00000000;
// Definir o 3º bit
flags = flags | 3;  // Mas isso não funciona
// Limpar o 5º bit
flags = flags & 5;  // Também não é isso
// Alternar o 2º bit
flags = flags ^ 2;  // Parece funcionar, mas não tenho certeza

O problema é que não entendo como especificar corretamente o número do bit. Quando escrevo flags | 3, pensei que isso definiria o 3º bit, mas aparentemente não funciona assim. Li sobre máscaras de bits, mas fiquei confuso com elas.

Por favor, me ajudem.