Entendendo a tabela-verdade bit a bit
Cada operação lógica bit a bit segue uma tabela-verdade fixa, aplicada de forma independente a cada par de posições de bit correspondentes.
| Bit A | Bit B | AND | OR | XOR |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
- Esta calculadora limita as entradas à faixa de um inteiro de 32 bits com sinal (0 a 2.147.483.647) porque os operadores bit a bit do JavaScript convertem internamente os números para representações de 32 bits antes de operar, conforme a especificação ECMAScript.
- O NOT (~A) produz sempre um resultado que, interpretado como inteiro de 32 bits com sinal, vale −(A + 1) — esta calculadora exibe o equivalente sem sinal de 32 bits (por exemplo, ~12 aparece como 4.294.967.283 em vez de −13), para que a representação binária mostrada não seja ambígua.
- Deslocamentos (B) maiores que 31 são limitados a 31 por esta calculadora, já que deslocar um valor de 32 bits por 32 ou mais posições no JavaScript dá a volta (usa apenas os 5 bits menos significativos da quantidade de deslocamento) em vez de produzir 0, como a intuição poderia sugerir.
O que são operações bit a bit?
Uma operação bit a bit processa um número no nível de seus dígitos binários individuais (bits), comparando ou deslocando os 0s e 1s de sua representação em base 2, em vez de fazer aritmética comum em base 10. Todo número inteiro pode ser escrito em binário como uma sequência de bits, cada um representando uma potência de 2 — por exemplo, 12 em binário é 1100, ou seja, 1×8 + 1×4 + 0×2 + 0×1.
As operações lógicas bit a bit — AND, OR, XOR (ou exclusivo) e NOT — comparam as posições de bit correspondentes de dois números (ou invertem os bits de um único número) segundo as regras padrão da lógica booleana, aplicadas de forma independente a cada posição. Já as operações de deslocamento — à esquerda e à direita — movem todos os bits de um número um certo número de posições, o que equivale matematicamente a multiplicar ou dividir por uma potência de 2.
As operações bit a bit são fundamentais na computação e na programação de baixo nível: servem para ligar, desligar e verificar sinalizadores individuais num conjunto de opções (bit flags), para multiplicar e dividir rapidamente por potências de 2, em algoritmos criptográficos, na manipulação de gráficos e cores (combinando os canais vermelho, verde e azul) e na codificação compacta de dados.
Como usar esta calculadora bit a bit
- Informe o primeiro número (A) como um inteiro não negativo (de 0 a 2.147.483.647, a faixa de um inteiro de 32 bits com sinal).
- Informe o segundo número (B). Em AND, OR e XOR, ele é o segundo operando comparado bit a bit com A. Nas operações de deslocamento, ele é a quantidade de posições a deslocar (0–31 é o efetivo; valores maiores são limitados a 31). Em NOT, B é ignorado, já que a operação atua somente sobre A.
- Selecione a operação: AND, OR, XOR, NOT, deslocamento à esquerda ou deslocamento à direita.
- Leia o resultado em decimal, junto com a representação binária de A, de B (ou da quantidade de deslocamento) e do resultado.
Como funciona cada operação bit a bit
O AND compara cada posição de bit e devolve 1 apenas onde os dois bits são 1; caso contrário, 0. Exemplo resolvido: 12 (1100) AND 10 (1010) = 8 (1000), já que apenas a terceira posição (valor 8) tem 1 nos dois números.
O OR compara cada posição de bit e devolve 1 onde pelo menos um dos dois bits é 1. Exemplo resolvido: 12 (1100) OR 10 (1010) = 14 (1110). Já o XOR (ou exclusivo) devolve 1 onde exatamente um dos dois bits é 1 (mas não os dois). Exemplo resolvido: 12 (1100) XOR 10 (1010) = 6 (0110).
O NOT inverte cada bit de um único número (0 vira 1, 1 vira 0). Como esta calculadora opera sobre valores de 32 bits, NOT 12 inverte todos os 32 bits e produz 4.294.967.283 quando interpretado como inteiro de 32 bits sem sinal (a representação em complemento de dois de −13 se interpretado com sinal).
O deslocamento à esquerda (A << B) move todos os bits de A B posições para a esquerda, preenchendo com 0 as posições menos significativas que ficaram vagas — o que equivale a multiplicar A por 2^B. Exemplo resolvido: 12 << 2 = 48 (equivalente a 12 × 2² = 12 × 4 = 48). O deslocamento à direita (A >> B) move todos os bits de A B posições para a direita, descartando os bits menos significativos — o que equivale à divisão inteira de A por 2^B, arredondando para baixo. Exemplo resolvido: 12 >> 2 = 3 (equivalente a ⌊12 ÷ 4⌋ = 3).
Erros comuns
- Confundir AND/OR bit a bit com AND/OR lógicos (booleanos) — os operadores bit a bit atuam sobre cada bit do número de forma independente, ao passo que os lógicos tratam o valor inteiro como uma única condição verdadeiro/falso; os dois dão resultados diferentes, exceto no caso especial dos valores 0 e 1.
- Esperar que um deslocamento à esquerda muito grande produza sempre um número proporcionalmente maior — deslocar demais empurra bits significativos para fora do limite de 32 bits, e eles são descartados (estouro).
- Ler mal o resultado do NOT — como ele inverte todos os 32 bits, o resultado decimal sem sinal de ~A parece muito maior que o próprio A, embora, na interpretação com sinal em complemento de dois, represente um número negativo pequeno, −(A+1).
- Tratar o deslocamento à direita como sempre equivalente a uma divisão comum — em inteiros não negativos ele coincide exatamente com a divisão inteira por uma potência de 2, mas o comportamento muda com números negativos, conforme o deslocamento seja aritmético ou lógico.
Perguntas frequentes
Qual é a diferença entre AND bit a bit e AND lógico?
O AND bit a bit (&) compara dois números bit a bit e devolve um novo número em que cada bit é 1 apenas se os dois bits correspondentes das entradas forem 1 — por exemplo, 12 & 10 = 8. O AND lógico (&&) trata cada valor inteiro como uma única condição verdadeiro/falso e devolve um dos operandos originais ou um booleano, avaliando veracidade em vez de combinar bits individuais. Os dois operadores servem a propósitos distintos e costumam produzir resultados bem diferentes.
Como funciona o XOR?
O XOR (ou exclusivo) compara dois números bit a bit e devolve 1 em cada posição em que exatamente um dos dois bits correspondentes é 1 (não os dois, nem nenhum). Para 12 (1100) XOR 10 (1010): comparando cada posição, obtém-se 0110, que é 6 em decimal. O XOR é muito usado para alternar bits, detectar diferenças entre dois valores e em cálculos simples de soma de verificação e paridade.
O que faz um deslocamento à esquerda?
Um deslocamento à esquerda (A << B) move todos os bits da representação binária de A B posições para a esquerda, preenchendo com 0 as posições menos significativas que ficaram vagas. Isso equivale matematicamente a multiplicar A por 2 elevado a B. Por exemplo, 12 << 2 = 48, o mesmo resultado de 12 × 2² = 12 × 4 = 48.
O que faz o NOT bit a bit?
O NOT bit a bit (~A) inverte cada bit de A — todo 0 vira 1 e todo 1 vira 0. Aplicado à representação de 32 bits de 12 (00000000000000000000000000001100), o NOT produz um valor com todos esses bits invertidos, que como número de 32 bits sem sinal aparece como 4.294.967.283 e, como inteiro com sinal, representa −13 em complemento de dois (seguindo a identidade ~A = −(A+1)).
Como o deslocamento à direita difere da divisão?
Para inteiros não negativos, um deslocamento à direita (A >> B) produz exatamente o mesmo resultado da divisão inteira por 2^B: A >> B = ⌊A ÷ 2^B⌋. Por exemplo, 12 >> 2 = 3, batendo com ⌊12 ÷ 4⌋ = 3. As duas operações podem divergir com números negativos, em que o tipo específico de deslocamento (aritmético ou lógico) muda o tratamento do bit de sinal — detalhe relevante em contextos de programação de baixo nível.
Por que as operações bit a bit aqui se limitam a inteiros de 32 bits?
Os operadores bit a bit nativos do JavaScript (&, |, ^, ~, <<, >>) convertem internamente seus operandos para inteiros de 32 bits antes de operar, conforme a especificação da linguagem ECMAScript. Esta calculadora espelha esse comportamento padrão, portanto as entradas ficam limitadas à faixa representável em 32 bits (0 a 2.147.483.647 para os valores não negativos aceitos aqui).
Referências
- Warren HS Jr. Hacker's Delight. 2nd ed. Addison-Wesley, 2012. (Standard reference for bitwise algorithms and two's-complement arithmetic.)
- ECMA International. ECMA-262: ECMAScript Language Specification, §6.1.6.1 (Bitwise operators, ToInt32/ToUint32). ecma-international.org.
- Patterson DA, Hennessy JL. Computer Organization and Design: The Hardware/Software Interface. 5th ed. Morgan Kaufmann, 2013. (Binary representation and bitwise logic.)