Calculadora bit a bit

Realize operações bitwise em inteiros e veja os resultados em decimal, hexadecimal e binário.

Digite os valores e clique em Calcular.

Como funciona

  1. Digite dois números: insira os valores a operar, em decimal, binário (prefixo 0b) ou hexadecimal (prefixo 0x).
  2. Escolha a operação: selecione AND, OR, XOR, NOT, deslocamento à esquerda (<<) ou deslocamento à direita (>>).
  3. Veja o resultado: a saída exibe o resultado em decimal, binário e hexadecimal ao mesmo tempo, com uma visualização dos bits.

Por que usar a calculadora bitwise?

Operações bitwise são fundamentais em programação de sistemas, criptografia, desenvolvimento de jogos, gráficos, rede e sistemas embarcados.

Funcionalidades

Perguntas frequentes

Para que serve XOR em programação?

XOR (^) serve para inverter bits, criptografia/ofuscação simples, trocar variáveis sem variável temporária, verificar paridade e somas de verificação.

Qual é a diferença entre << e >>?

O deslocamento à esquerda (<<) move todos os bits para a esquerda, equivalente a uma multiplicação por potências de 2. O deslocamento à direita (>>) move para a direita, equivalente a divisão.

Como ativar ou desativar um bit específico?

Para ativar o bit n: value |= (1 << n). Para desativar o bit n: value &= ~(1 << n). Para inverter o bit n: value ^= (1 << n). Para verificar o bit n: (value >> n) & 1.

Da álgebra booleana ao silício: como as operações bit a bit se tornaram universais

As operações bit a bit que toda CPU moderna implementa vêm de dois artigos fundadores publicados com mais de 80 anos de diferença. Em 1854, George Boole publicou «An Investigation of the Laws of Thought», definindo a álgebra da lógica de dois valores, AND, OR, NOT e suas identidades. Era um trabalho filosófico, não de engenharia. Então em 1937, um estudante de mestrado do MIT de 21 anos chamado Claude Shannon escreveu sua tese de mestrado «A Symbolic Analysis of Relay and Switching Circuits», provando que a álgebra booleana podia descrever circuitos elétricos de relés e portanto que qualquer computação lógica podia ser fisicamente implementada. Esta tese é amplamente citada como a tese de mestrado mais importante do século XX e é a base de toda eletrônica digital. O complemento de dois, a representação binária para números negativos que toda CPU usa, foi patenteado em 1962 pela Burroughs Corporation mas já havia sido usado no IBM 704 (1954) e outras máquinas antigas. IEEE 754 padronizou a representação de ponto flutuante em 1985, fixando o layout de bits que cada Number JavaScript ainda usa, 1 bit de sinal, 11 expoente, 52 mantissa para binary64. Hoje, os operadores da linguagem C & | ^ ~ << >> mapeiam quase diretamente para instruções únicas de CPU, razão pela qual o código bit a bit pode ser dramaticamente mais rápido que o equivalente aritmético.

Os seis operadores, o que fazem em nível de bit

Onde o bit a bit realmente ganha seu sustento

Erros que mordem

Por que complemento de dois, e o que significa em nível de bit

Toda CPU moderna representa inteiros negativos usando complemento de dois. Em um byte com sinal de 8 bits, os valores 0 a 127 são codificados como binário 0000_0000 a 0111_1111. Então −1 é codificado como 1111_1111, −2 como 1111_1110, até −128 como 1000_0000. A razão: com essa codificação, a adição funciona da mesma forma se as entradas são com sinal ou sem sinal, a CPU não precisa de instruções add-com-sinal e add-sem-sinal separadas. A assimetria é que o intervalo negativo é um maior que o positivo (em 8 bits, −128 a +127), razão pela qual Math.abs(INT_MIN) transborda em toda linguagem com inteiros de largura fixa. As codificações mais antigas sinal-magnitude (um bit para o sinal, resto para magnitude) e complemento de um existiram nos anos 1950-60 mas perderam para o complemento de dois porque tinham duas representações de zero e exigiam hardware de caso especial para negação.

Mais perguntas frequentes

Por que ~5 é igual a -6 em vez de 250?

Porque em complemento de dois (a codificação que toda CPU moderna usa), virar cada bit de um número positivo te dá -n - 1. Então ~5 === -6 e ~0 === -1. Em um contexto sem sinal de 8 bits, o mesmo padrão de bits que ~5 (binário 1111_1010) representaria 250. JavaScript trata o resultado como sinal 32 bits, então você vê -6. Para obter a interpretação sem sinal: (~5) >>> 0 em 32 bits, que dá 4294967290, ou mascarar a 8 bits com ~5 & 0xFF que dá 250.

XOR é realmente uma criptografia?

XOR é o bloco de construção de cada cifra simétrica moderna, mas XOR sozinho não é criptografia segura. Um bloco de uso único, XOR com uma chave verdadeiramente aleatória tão longa quanto a mensagem, usada exatamente uma vez, é teoricamente da informação inquebrável (Shannon, 1949). Reutilize a chave, ou use uma chave mais curta que a mensagem, e a análise de frequência a quebra trivialmente. Cifras reais como AES usam XOR mais difusão e substituição para amplificar uma chave curta em um fluxo de bytes pseudo-aleatórios que parecem um bloco de uso único para qualquer um sem a chave. Então «criptografar com XOR» é bom apenas para ofuscação trivial, nunca para segredos reais.

Quando devo usar BigInt em vez de Number para manipulação de bits?

Sempre que precisar de mais de 32 bits de precisão bit a bit. Os operadores bit a bit JavaScript truncam operandos Number para inteiros com sinal de 32 bits antes de computar. Se você precisa de máscaras de 64 bits (e.g. manipular um conjunto de flags de recursos de 64 bits, trabalhar com offsets mmap Linux, ou implementar SHA-512), use BigInt: 0xFFFFFFFFFFFFFFFFn & 0xFFn === 255n. BigInt é mais lento que Number, ~3-10× dependendo da operação, então reserve para os casos onde 32 bits são genuinamente poucos.

Como conto o número de bits 1 em um número?

Isto é a contagem de população ou peso de Hamming. A maioria das CPUs modernas tem uma única instrução para isso (POPCNT em x86, VCNT em ARM). Em JavaScript, não há nativo, então use o clássico de manipulação de bits: let c = 0; while (x) { c += x & 1; x >>>= 1; }. Ou o truque SWAR paralelo de Hacker's Delight: x = x - ((x >> 1) & 0x55555555); x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0F0F0F0F; return (x * 0x01010101) >>> 24;, que conta os bits em um inteiro de 32 bits em aproximadamente uma dúzia de ciclos.

Meus dados são enviados a algum lugar quando uso esta calculadora?

Não. Cada operação executa no motor JavaScript do seu navegador, nenhuma chamada de rede acontece durante um cálculo. Abra a aba Rede no DevTools e clique Calcular, você verá zero requisições de saída. Seguro para máscaras sensíveis, chaves, ou trabalho de layout de bits proprietário.

Ferramentas relacionadas

Conversor de binário para texto Conversor de base numérica Calculadora Chmod Gerador de hash grátis