Tempo/Números
Operações bit a bit
AND/OR/XOR/NAND/NOR/XNOR/NOT e deslocamentos sobre números inteiros de uma largura definida (8/16/32/64 bits) em qualquer sistema numérico.
(quantidade de bits de deslocamento, número decimal)
Bitwise operations work directly on a number's individual bits rather than its value as a whole — the basis for permission flags, network protocols, and low-level optimization.
How to use it
- Enter one or two numbers in any base (binary, hex, decimal) and pick an operation (AND, OR, XOR, NAND, NOR, XNOR, NOT, or a shift).
- Pick a bit width (8/16/32/64 bits) — it affects how NOT and shifts behave at the number's boundaries.
- The result is shown instantly in several number bases for easy comparison.
Common uses
- Working with permission or setting flags packed into a single number (file system access rights, for example).
- Debugging a network protocol or binary format where fields are packed at the individual-bit level.
- A teaching example for understanding binary number representation and operations on it.
Things to keep in mind
The result of NOT and shifts depends on the chosen bit width — the same number gives a different result at 8-bit versus 32-bit width because of the different number of bits involved.
XOR is often used to toggle a flag — applying XOR twice with the same value returns the original.
Artigo sobre esta ferramenta: Operações bit a bit: como AND, OR e XOR funcionam no nível dos bits
Perguntas frequentes
Qual a diferença entre AND, OR, XOR, NAND, NOR, XNOR e NOT?
AND dá 1 apenas quando ambos os bits são 1, OR dá 1 quando pelo menos um é 1, e XOR dá 1 quando os bits diferem. NAND/NOR/XNOR são suas negações, e NOT inverte cada bit de um único operando.
Como a largura de bits e o sinal de um número são tratados?
Escolha uma largura de 8/16/32/64 bits — operações e deslocamentos acontecem dentro desse intervalo. Números negativos são representados em complemento de dois, então o resultado de NOT ou um deslocamento pode parecer inesperado se você está acostumado com notação decimal.
Qual a diferença entre um deslocamento à esquerda e à direita?
Um deslocamento à esquerda (<<) adiciona zeros à direita, efetivamente multiplicando por 2 elevado à quantidade deslocada. Um deslocamento à direita pode ser lógico (adiciona zeros à esquerda) ou aritmético (preserva o bit de sinal) — o tipo depende do modo selecionado.
Por que uma expressão como "if (a & b == c)" geralmente não funciona como esperado?
Na maioria das linguagens, o operador de comparação == tem precedência maior que o operador bit a bit &, então a expressão é avaliada como "a & (b == c)", e não como o autor geralmente pretende. Para evitar essa armadilha, sempre coloque operações bit a bit entre parênteses explícitos.
Por que usar flags bit a bit em vez de variáveis booleanas separadas?
Um conjunto de flags empacotado em um único número é armazenado e transmitido de forma mais compacta (por exemplo, em protocolos de rede ou formatos de arquivo), e verificar ou alterar uma flag específica com AND/OR/XOR é uma única operação rápida.