- Multiplicar/Dividir por 2: x << y (x·2y), x >> y (x/2y)
- Ligar o bit i: x | (1 << i)
- Verificar se o bit i está ligado: x & (1 << i)
- Desligar o bit i: x & ~(1 << i)
- Alternar o bit i: x ^ (1 << i)
- Obter o bit menos significativo ligado: x & -x
- Ligar todos os n bits: (1 << n) - 1
- União de dois conjuntos x e y: x | y
- Intersecção: x & y
- Diferença simétrica: x ^ y
- Set de único elemento {i}: 1 << i
- Teste de pertinência: x & (1 << i) != 0
Iterar sobre todas as máscaras possíveis de tamanho n:
for (int mask = 0; mask < (1 << n); mask++)
Iterar sobre todas as submáscaras:
for (int ss = mask; ss > 0; ss = (ss - 1) & mask)Fonte: Código de DP em árvore para resolver problema de Steiner Trees