0Pricing
C Academy · Aula

Máscaras de bits e flags

Defina, limpe e alterne bits.

Máscaras de bits e flags é uma aula grátis de C Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.

Bits como sinalizadores

Um único inteiro pode armazenar várias configurações de ligado/desligado, uma por bit. Cada bit é um sinalizador.

Isso é compacto e rápido, sendo comum em sistemas operacionais e código embarcado.

#include <stdio.h>

int main(void) {
    unsigned flags = 0;
    printf("Initial flags = %u\n", flags);
    return 0;
}

Definindo máscaras

Uma máscara é um valor com bits específicos definidos. Defina cada sinalizador como uma potência de dois para que ele ocupe seu próprio bit.

#include <stdio.h>

#define READ  (1u << 0)
#define WRITE (1u << 1)
#define EXEC  (1u << 2)

int main(void) {
    printf("READ=%u WRITE=%u EXEC=%u\n", READ, WRITE, EXEC);
    return 0;
}

Definindo um bit

Para ativar um sinalizador, faça OR do valor com a máscara: flags |= MASK.

Os bits que já estão definidos continuam definidos.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = 0;
    flags |= READ;
    flags |= WRITE;
    printf("flags = %u\n", flags);
    return 0;
}

Limpando um bit

Para desativar um sinalizador, faça AND com a máscara invertida: flags &= ~MASK.

A máscara invertida tem 0 no bit-alvo e 1 em todos os outros bits.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = READ | WRITE;
    flags &= ~WRITE;
    printf("flags = %u\n", flags);
    return 0;
}

Alternando um bit

Para inverter um sinalizador, faça XOR com a máscara: flags ^= MASK.

Se ele estava ativado, será desativado, e vice-versa.

#include <stdio.h>
#define EXEC (1u << 2)

int main(void) {
    unsigned flags = 0;
    flags ^= EXEC;
    printf("after toggle: %u\n", flags);
    flags ^= EXEC;
    printf("after toggle: %u\n", flags);
    return 0;
}

Testando um bit

Para verificar se um sinalizador está ativado, faça AND com a máscara e teste o resultado: flags & MASK é diferente de zero quando o bit está definido.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = READ;
    if (flags & READ)  printf("READ is on\n");
    if (flags & WRITE) printf("WRITE is on\n");
    else printf("WRITE is off\n");
    return 0;
}

Definindo vários sinalizadores

Combine máscaras com OR para definir vários sinalizadores de uma só vez.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)

int main(void) {
    unsigned flags = READ | WRITE | EXEC;
    printf("all set: %u\n", flags);
    return 0;
}

Verificando vários de uma só vez

Para testar se todos os sinalizadores de um grupo estão definidos, faça AND com a máscara combinada e compare o resultado com a própria máscara.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = READ | WRITE;
    unsigned need = READ | WRITE;
    if ((flags & need) == need) printf("both present\n");
    return 0;
}

Exibindo sinalizadores ativos

Percorra suas máscaras para informar quais sinalizadores estão ativados no momento.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)

int main(void) {
    unsigned flags = READ | EXEC;
    if (flags & READ)  printf("R");
    if (flags & WRITE) printf("W");
    if (flags & EXEC)  printf("X");
    printf("\n");
    return 0;
}

Contando bits definidos

Para saber quantos sinalizadores estão ativados, conte os bits definidos limpando repetidamente o bit definido de menor ordem.

#include <stdio.h>

int main(void) {
    unsigned v = 0b10110;
    int count = 0;
    while (v) {
        v &= (v - 1);
        count++;
    }
    printf("set bits = %d\n", count);
    return 0;
}

Enumerações para sinalizadores

Usar um enum mantém as definições dos sinalizadores organizadas e legíveis.

#include <stdio.h>

enum { OPT_A = 1, OPT_B = 2, OPT_C = 4 };

int main(void) {
    unsigned opts = OPT_A | OPT_C;
    printf("opts = %u\n", opts);
    if (opts & OPT_C) printf("C enabled\n");
    return 0;
}

Verificação rápida

Teste seus conhecimentos sobre máscaras e sinalizadores.

Recapitulação

Você aprendeu a gerenciar sinalizadores de bits:

  • Defina com flags |= MASK.
  • Limpe com flags &= ~MASK.
  • Alterne com flags ^= MASK.
  • Teste com flags & MASK.
  • Defina máscaras como potências de dois, geralmente com macros ou enumerações.

Perguntas Frequentes

A aula “Máscaras de bits e flags” é grátis?

Sim — o texto completo de “Máscaras de bits e flags” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.

O que vou aprender em “Máscaras de bits e flags”?

Defina, limpe e alterne bits. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C Academy?

Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Máscaras de bits e flags”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C Academy?

Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Operadores bit a bit
  2. Deslocamentos
  3. Máscaras de bits e flags
  4. Truques práticos com bits
← Voltar para C Academy