- O que cada operação faz?
- AND (&): um bit é 1 só se as duas entradas tiverem 1. Usado para máscaras. OR (|): um bit é 1 se qualquer entrada tiver 1. Usado para ligar bits. XOR (^): um bit é 1 se as entradas forem diferentes. Usado para alternar bits e em checksums. NOT (~): inverte todos os bits; para inteiros com sinal, ~x = -x - 1. Deslocamento à esquerda (<<): move os bits para a esquerda e preenche com zeros — cada deslocamento multiplica por 2. Deslocamento à direita (>>): move para a direita e preenche a esquerda com o bit de sinal — cada deslocamento divide por 2 (arredondando para menos infinito). Deslocamento sem sinal à direita (>>>): trata o valor como 32 bits sem sinal, move para a direita e preenche a esquerda com zeros.
- Por que o AND funciona como máscara?
- Fazer AND com um valor que tem 1 só nas posições que você quer manter zera todo o resto. Para extrair o byte mais baixo de um valor de 32 bits, faça AND com 0xff (que em binário é 0000...0000_11111111). Os bits onde a máscara é 1 passam sem mudança; onde a máscara é 0, viram 0. É assim que você isola um único byte, verifica se um bit de flag está ligado ou remove o bit de sinal.
- Por que o NOT de um número positivo fica negativo?
- Porque na maioria das linguagens os inteiros são guardados em complemento de dois. O bit mais alto indica o sinal. Quando você inverte todos os bits de 5 (que tem o bit mais alto 0), o resultado tem o bit mais alto 1, que é interpretado como negativo. Em complemento de dois, ~x = -x - 1 exatamente. Então ~5 = -6, ~0 = -1, ~(-1) = 0. Não tem nada errado — é só como inteiros com sinal são codificados.
- Qual a diferença entre >> e >>> ?
- >> é o deslocamento aritmético à direita: move os bits para a direita e preenche a esquerda com cópias do bit de sinal. -1 >> 1 continua -1 (tudo 1, tudo 1). >>> é o deslocamento sem sinal (lógico) à direita: preenche a esquerda com zeros em vez do bit de sinal. -1 >>> 1 vira 2147483647 (o maior valor positivo de 32 bits). >>> só faz sentido nos 32 bits mais baixos, então esta calculadora limita o deslocamento a 31 para >>>.
- Por que BigInt em vez dos números normais do JavaScript?
- Os operadores bit a bit normais do JavaScript truncam silenciosamente para 32 bits com sinal. Então 1 << 40 em JS puro dá 256 (porque 40 módulo 32 é 8), e não 1099511627776 como deveria. O BigInt não tem esse limite — deslocamentos e operações bit a bit funcionam em inteiros de precisão arbitrária. Isso importa para criptografia, empacotamento de cores, cálculo de endereços e qualquer coisa em que 32 bits não bastam. A grade de 32 bits continua mostrando os 32 bits mais baixos, mas os resultados numéricos são o valor BigInt completo.
- Como leio a grade de 32 bits?
- A grade tem 32 células, da esquerda (bit 31, o bit mais alto / bit de sinal) para a direita (bit 0, o mais baixo). Células verdes são 1, neutras são 0. Para ver se o bit N está ligado, conte da direita começando em 0. Os rótulos embaixo da grade (31-24, 23-16, 15-8, 7-0) marcam os limites de cada byte — útil quando você trabalha com estruturas empacotadas, canais de cor ou flags de status.
- Posso digitar números negativos?
- Sim. Coloque um sinal de menos antes de qualquer base: '-5', '-0xff', '-0b1010'. Negativos aparecem em complemento de dois na grade de 32 bits, então -1 enche a grade de 1, -2 enche de 1 menos o bit mais baixo, e assim por diante. Os resultados numéricos em hex/binário/octal usam representação com sinal e um menos na frente — '-0xff' em vez do padrão de bits em complemento de dois — que é a convenção do BigInt.toString().
- Para que serve o XOR na vida real?
- O XOR tem três usos clássicos. (1) Alternar bits — XOR com uma máscara inverte exatamente os bits que a máscara tem como 1. (2) Checksums baratos — faça XOR de todos os bytes de uma mensagem; quem recebe faz o mesmo e compara. A paridade do RAID usa isso. (3) Criptografia no estilo one-time pad — faça XOR do texto com uma chave, e XOR do texto cifrado com a mesma chave para recuperar. O XOR também é seu próprio inverso: x ^ y ^ y = x, por isso serve para trocar variáveis sem uma temporária em código de baixo nível.