Calculadora de programador e calculadora bit a bit

Escreva uma expressão usando literais 0x hexadecimais, 0b binários e 0o octais, os operadores bit a bit & | ^ ~, os deslocamentos << >> >>>, as rotações e a aritmética simples — o resultado atualiza-se ao vivo como decimal, hexadecimal, octal e binário com um tamanho de palavra de 8, 16, 32 ou 64 bits, com ou sem sinal. Abaixo, uma grelha de bits clicável, um painel bit a bit com dois operandos (AND / OR / XOR / NAND / NOR / NOT / deslocamentos / ROL / ROR) e definir / limpar / alternar um único bit. Para a conversão simples de bases sem lógica de bits veja o Conversor matemático; para estatística a Calculadora de estatística.
Tamanho da palavra   Vista   Operadores: & | ^ ~ << >> >>> + - * / % ( ) — só matemática inteira; os resultados dão a volta no tamanho da palavra.
DEC
HEX
OCT
BIN
Os bits são mostrados do mais significativo para o menos; as células esbatidas estão fora do tamanho de palavra atual.
índice do bit (0 = menos significativo)
A =    B =  A e B aceitam expressões completas (p. ex. 1 << 12).
A tabela de resultados aparece assim que A e B forem ambos analisados. Os deslocamentos e as rotações recebem a contagem de B.
Experimente um exemplo:
Como se comportam os deslocamentos: << aplica máscara de volta ao tamanho da palavra (os bits que saem pelo topo desaparecem). >>> é sempre um deslocamento lógico (sem sinal). >> segue o seletor Vista: aritmético no modo com sinal, lógico no modo sem sinal. Privacidade: toda a calculadora corre neste separador — sem servidor, sem armazenamento.

O que é uma calculadora de programador?

Uma calculadora de programador faz aritmética da forma como o computador a guarda: em palavras de largura fixa de bits. Em vez de uma reta numérica infinita, uma palavra de 8 bits é um círculo de 256 valores, uma de 32 bits um círculo de 4 294 967 296. Cada resultado é reenrolado de volta nesse círculo, e os mesmos bits podem ser lidos como contagem sem sinal (0 … 255) ou como valor com sinal em complemento para dois (-128 … 127). As quatro linhas de base acima são os mesmos bits em quatro representações — edite uma e as outras três seguem.

Porque é que os programadores vivem em hexadecimal

Um dígito hexadecimal são exatamente quatro bits, por isso um byte são sempre dois dígitos hexadecimais, e uma palavra de 32 bits são sempre oito. O hexadecimal é binário com os zeros reagrupados para o olho humano:

BinárioHexadecimalDecimal
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (ou -128 com sinal)

Complemento para dois num parágrafo

Para ler uma palavra como valor com sinal, olhe para o bit do topo. Se for 0, o valor é apenas a contagem sem sinal. Se for 1, subtraia o tamanho do círculo: um 0xFF de 8 bits é 255 − 256 = −1. Esse é todo o truque — -x e 0 - x produzem os mesmos bits, razão por que o mesmo hardware de somador serve para ambos. A inversão de sinal é "inverter cada bit e somar 1": NOT(0x01) = 0xFE, +1 = 0xFF = −1.

Os operadores de deslocamento num relance

OperadorNomeExemplo de 8 bits (a = 0xF0)
a << 1deslocamento para a esquerda0xE0 — o bit do topo cai fora, entra zero por baixo
a >> 1 (sem sinal)deslocamento lógico para a direita0x78 — entram zeros pelo topo
a >> 1 (com sinal, a = −16)deslocamento aritmético para a direita0xF8 = −8 — o bit de sinal é copiado
a >>> 1sempre lógico0x78, independentemente do seletor Vista
rol(a, 1)rodar para a esquerda0xE1 — o bit do topo que caiu volta a entrar por baixo

Erros comuns que esta página ajuda a evitar

Deslocamento aritmético vs lógico: copiar o bit de sinal (aritmético) e preencher com zeros (lógico) diferem sempre que o bit do topo está a 1 — mude o seletor Vista e veja 0xF0 >> 1 mudar entre 0x78 e 0xF8.
A surpresa dos 53 bits: o tipo Number comum do JavaScript é um float de 64 bits com apenas 53 bits inteiros seguros, por isso 0xFFFFFFFFFFFFFFFF não pode ser representado exatamente — esta página usa aritmética inteira exata de 64 bits internamente, pelo que cada dígito hexadecimal que vê é fiável.
Armadilhas de vírgula flutuante: 0.1 + 0.2 dá, como se sabe, 0.30000000000000004 em vírgula flutuante; esta calculadora é apenas inteira por conceção — a divisão trunca para zero, exatamente como o / do C com inteiros.
Zeros à esquerda: no C antigo um literal como 052 significava octal. Aqui o decimal são simples dígitos e o octal precisa do prefixo 0o, pelo que nada é ambíguo.

FAQ

Qual é o maior número? — 64 bits sem sinal: 18 446 744 073 709 551 615 (0xFFFFFFFFFFFFFFFF); com sinal: ±9 223 372 036 854 775 808.
Porque é que 1 << 8 deu 0? — o tamanho da palavra é 8 bits; o bit 8 não existe, e a máscara descarta-o. Mude para 16/32/64 bits para o manter.
O que faz o ~? — NOT bit a bit: cada bit inverte-se dentro do tamanho de palavra atual, pelo que ~0 são todos a 1 (255 / 65535 / −1 …).
Há vírgula flutuante? — não, só inteiros; use a Calculadora científica para floats, trigonometria e funções.
Algo sai da minha máquina? — não: sem servidor, sem armazenamento, sem análises; feche o separador e tudo desaparece.