Calculadora binária
Resultado
Binário
- Decimal
- 17
- Hexadecimal
- 11
- Resto
- 0
Uma calculadora binária resolve as quatro operações com números escritos na base dois: soma, subtração, multiplicação e divisão. A resposta sai em binário, decimal e hexadecimal ao mesmo tempo. A base dois usa apenas os dígitos 0 e 1, e a aritmética é a mesma que você já conhece — o que muda é só onde acontece o transporte. Em decimal, 9 mais 1 dá transporte porque a base é dez; em binário, 1 mais 1 dá transporte porque a base é dois. Esse único fato é toda a adição binária, e a subtração, a multiplicação e a divisão saem dele do jeito que você espera. A resposta é impressa três vezes porque as três leituras servem para coisas diferentes: o binário é o que você veio buscar, o decimal é o que dá para conferir de relance, e o hexadecimal são os mesmos bits agrupados de quatro em quatro, que é como quem escreve código de máquina os lê. A divisão é inteira, então o resto ganha uma linha própria em vez de sumir dentro de uma parte fracionária.
Fórmula
1011 + 110 = 10001 (11 + 6 = 17)
- 1011
- O primeiro número, escrito na base dois. Ler esses dígitos como base dois é o que faz deles onze — os mesmos dígitos lidos como decimal seriam mil e onze, que é exatamente o erro que esta página existe para evitar
- + − × ÷
- A operação. Ela funciona dígito a dígito exatamente como em decimal, com o dez trocado por dois em todo lugar onde acontece um transporte ou um empréstimo
- 1 + 1 = 10
- O único fato da aritmética binária que ainda não é familiar. Dois uns formam um zero com um 1 transportado para a casa seguinte, porque os dígitos se esgotam depois do 1. Três uns formam 11 — um 1 na resposta e um 1 transportado
- soma de dígito × 2ⁿ
- Como a leitura decimal é produzida: cada dígito binário multiplicado pelo seu valor posicional, e os resultados somados. É assim que 10001 dá dezessete, e é o único caminho entre a resposta binária e a decimal
- resto
- O que sobra quando uma divisão não é exata. Dividir 1011 por 10 dá 101 com 1 de resto, porque onze é cinco vezes dois mais um. O resto é mostrado sempre, e é zero nas três operações que não podem deixar resto
- 53 bits
- A largura de entrada que esta página aceita: até 9.007.199.254.740.991, que é o maior número que cabe em 53 dígitos binários. Acima dessa largura uma máquina deixa de conseguir distinguir números inteiros vizinhos, e a aritmética silenciosamente deixaria de ser exata
Quem lê ou escreve binário precisa desta página pelo mesmo motivo que precisa de uma calculadora decimal: a aritmética não é difícil, mas fazer à mão é lento e os erros são invisíveis. Os usos do dia a dia são ler um registrador de hardware ou uma máscara de bits — 1011 AND alguma coisa, ou quais sinalizadores um byte de status tem ligados — e conferir um valor que um compilador, um depurador ou uma ferramenta de rede imprimiu em binário. Máscaras de sub-rede, bits de permissão de um arquivo, a coluna de sinalizadores de um registrador de status da CPU e o estado dos pinos de um microcontrolador são todos números binários com que as pessoas precisam fazer contas, e a leitura hexadecimal ao lado da resposta é a forma em que esses valores aparecem de fato quando estão documentados. O outro uso é aprender: a regra do transporte é a coisa que todo mundo erra no papel exatamente uma vez, e digitar 1011 mais 110 e ver 10001 aparecer conserta isso mais rápido do que um exemplo resolvido num livro. Estudantes que estão percorrendo bases numéricas à mão, e quem quer que esteja convertendo uma listagem de código de máquina de volta em algo conferível, vão ver as leituras decimal e hexadecimal fazerem quase todo o trabalho.
Exemplos resolvidos
Somando 1011 e 110
- Alinhe os dois números pela direita: 1011 e 0110
- Coluna da direita: 1 + 0 = 1
- Coluna seguinte: 1 + 1 = 10, então escreva 0 e transporte 1
- Coluna seguinte: 0 + 1 + o 1 transportado = 10, então escreva 0 e transporte 1
- Coluna da esquerda: 1 + o 1 transportado = 10, então escreva 0 e transporte 1 para uma casa nova
- O resultado é 10001, que em decimal é 16 + 1 = 17
O exemplo de abertura da página, e o jeito mais rápido de ver a regra do transporte em ação: a soma fica mais longa do que qualquer uma das parcelas porque o último transporte precisou de uma casa só para ele. A leitura decimal, 17, é a conferência — 11 mais 6 é mesmo 17 — e o hexadecimal 11 são os mesmos bits agrupados de quatro em quatro, e é só por isso que ele por acaso se parece com o onze decimal. Essa coincidência desaparece assim que os números crescem.
Dividindo 1011 por 10
- Isto é onze dividido por dois, então a resposta é cinco com um sobrando
- Cinco em binário é 101, e um é 1
- A página informa o quociente 101 e o resto 1 em vez de imprimir 101.1
O exemplo que mostra por que a linha do resto existe. Impresso só como quociente, 101 diria que onze dividido por dois é cinco, e é a linha de baixo que torna a frase verdadeira. Há um segundo motivo para não recorrer a um ponto decimal aqui: no momento em que um resultado tem parte fracionária, a aritmética pode deixar de terminar — um dividido por três em binário não acaba nunca — e as entradas e as saídas desta página são números inteiros do começo ao fim. Repare que o painel imprime o quociente e o resto como texto, algarismo por algarismo e sem separador de milhar, porque eles são numerais binários e não quantidades decimais.
Subtraindo 1011 de 110
- Isto é seis menos onze, então a resposta é negativa
- A diferença é cinco, e o sinal vai na frente do resultado
- Cinco é 101, então a resposta é −101
Aqui não se usa complemento de dois, o esquema que um processador usa para guardar números negativos. O sinal de menos fica como um sinal na frente do número, que é a forma que uma pessoa escrevendo no papel usa e a forma que continua legível quando o valor é impresso ao lado das leituras decimal e hexadecimal. A representação de máquina do mesmo valor seria um padrão de bits de largura fixa, e essa largura não é algo que esta página tenha.
Limitações
Esta página trabalha apenas com números inteiros. Não existe ponto binário nem parte fracionária binária, então uma entrada com ponto ou com vírgula entre os dígitos é recusada — o que também significa que uma divisão que não é exata devolve um quociente e um resto em vez de uma expansão decimal, e o quociente é truncado em direção ao zero, não arredondado. As entradas são limitadas a 9.007.199.254.740.991, o maior número que cabe em 53 dígitos binários; acima disso a aritmética já não pode ser garantida exata, e uma entrada desse tamanho é recusada em vez de respondida por aproximação. Os resultados obedecem ao mesmo teto, então uma multiplicação que estoura esse limite informa um erro em vez de um número errado. Os números negativos são escritos com um sinal de menos na frente, e não em complemento de dois, e nenhuma largura de bits fixa é oferecida ou presumida: 1011 tem quatro bits aqui, não os quatro bits menos significativos de um registrador. A divisão por zero é recusada. As linhas Binário e Hexadecimal do painel são impressas como as cadeias de algarismos que são, sem separador de milhar; a separação de milhar aparece apenas na linha Decimal.
Perguntas frequentes
- Por que 1 + 1 é igual a 10 e não 2?
- Porque na base dois não existe um algarismo para o dois. Os algarismos são 0 e 1, e depois disso a coluna se esgota, exatamente como a coluna das unidades se esgota depois do 9 em decimal. Então dois uns formam um zero naquela coluna e transportam um 1 para a coluna seguinte, o que se escreve 10 — e essa é a mesma afirmação que 9 + 1 = 10 em decimal, com a base trocada. Três uns formam 11: um 1 na resposta e um 1 transportado.
- Por que sempre existe uma linha de resto quando eu somo ou multiplico?
- Porque o painel de resultados é uma lista fixa, e não uma lista que cresce e encolhe conforme a operação escolhida, e uma linha que aparecesse e sumisse seria mais difícil de ler do que uma linha que está sempre no mesmo lugar. Subtrair, somar e multiplicar não podem deixar resto em números inteiros, então lá ela mostra 0 — esse zero é a linha dizendo que a operação não deixou resto, e não uma falha em calculá-lo. A divisão é a única operação daqui que pode deixar resto, e é justamente a linha que impede um quociente truncado de parecer uma resposta exata.
- Qual é o maior número que eu posso digitar?
- 9.007.199.254.740.991, que em binário são 53 uns, ou 1FFFFFFFFFFFFF em hexadecimal. O limite é a largura em que uma máquina deixa de conseguir distinguir números inteiros vizinhos, então acima dele a aritmética silenciosamente deixaria de ser exata — o resultado pareceria um número e não seria. Uma entrada mais larga do que isso é recusada com uma mensagem, em vez de truncada ou arredondada, e um resultado que estoura esse mesmo teto também é recusado.
- Posso fazer uma subtração e obter uma resposta negativa?
- Pode. Ponha o número maior na segunda caixa e a resposta volta com um sinal de menos na frente, nas três leituras. Isto não é complemento de dois, a representação que um processador usa quando guarda um número negativo em bits de largura fixa — é a forma com o sinal na frente, que é o que você escreveria no papel e o que continua legível ao lado de uma leitura decimal e de uma hexadecimal. Nenhuma largura de bits é presumida, então uma resposta negativa não é enrolada num padrão de uns.
- Por que a divisão não é exata?
- Porque esta página trabalha com números inteiros, então uma divisão que não é exata devolve o quociente truncado em direção ao zero mais o resto. Onze dividido por dois é cinco com resto um, e a página informa 101 e 1, e não 101.1. Isso é uma escolha deliberada, e não uma lacuna: no momento em que um resultado tem parte fracionária, a aritmética pode não terminar — um dividido por três em binário é uma expansão que se repete — e uma página que arredondasse isso em silêncio imprimiria um número que não é a resposta.
- Para que serve a leitura hexadecimal?
- Ela é o mesmo valor agrupado de quatro em quatro bits, que é como as pessoas que escrevem código de máquina leem o binário. Um byte tem oito bits e, portanto, exatamente dois algarismos hexadecimais, então FF, 2A e B2 são as formas que aparecem em documentação, depuradores e folhas de dados. A conversão entre binário e hexadecimal não é bem um cálculo — é um reagrupamento — e é por isso que a leitura sai de graça aqui.
Referências
- Binary number — the base-two system, positional notation, the carry rule and the arithmetic operations — Wolfram MathWorld (United States)
- Number base — why a numeral's value depends on its position and on the base, and how the same quantity is written in different bases — Wolfram MathWorld (United States)
- IEEE 754 — the double-precision format these calculations are carried out in, and the 53-bit significand that fixes this page's input ceiling — IEEE Standards Association (United States)