AnyCompiler

Operators Bitwise

C dá acesso direto ao padrão de bits de um integer: | define bits, & os testa ou limpa, ^ os inverte, e << / >> deslocam bits para a esquerda ou direita. 1 << n produz um valor com apenas o bit n definido — um padrão comum para representar uma flag entre muitas em um único integer.

#include <stdio.h>

int main() {
    unsigned int flags = 0;
    flags |= 1 << 0;
    flags |= 1 << 2;
    printf("%u\n", flags);
    printf("%d\n", (flags & (1 << 2)) != 0);
    printf("%d\n", (flags & (1 << 1)) != 0);
    return 0;
}
Output
5
1
0

flags |= 1 << 0 e flags |= 1 << 2 definem os bits 0 e 2, produzindo 5 (binário 101). (flags & (1 << 2)) != 0 então testa se o bit 2 especificamente está definido, independente de qualquer outro bit — o mesmo padrão que sistemas operacionais, código embarcado, e protocolos de rede usam para empacotar muitas flags booleanas em um único integer.

A seguir: enums e typedef — nomear constantes e dar a tipos complexos nomes mais curtos.

Practice exercise

Fixe um unsigned int flags em 0, depois defina o bit 3 usando |= e (1 << 3). Imprima se o bit 3 está definido usando (flags & (1 << 3)) != 0.