Divisão Binária De 110 Por 11
Divisão binária na prática
Todo mundo aprende que dividir em binário é o mesmo que dividir em decimal, só que com menos opções. O que não contam é que a primeira vez que você tenta fazer na mão, parece que tá perdendo tempo. Eu já li vários tutoriais que explicam o algoritmo de forma tão abstrata que você termina mais confuso do que começou. O processo em si é simples: você pega o divisor, vê quantas vezes ele cabe no dividendo, subtrai, desloca e repete. Mas o detalhe que quase ninguém menciona é que o alinhamento dos bits é onde a maioria erra. Se você desalinhar, tudo descola e o resto fica errado.
divisão binária de 110 por 11 passo a passo
Vamos ao exemplo concreto. Dividendo: 110 (binário). Divisor: 11 (binário). O resultado deve ser 10 com resto 0, porque 110 em decimal é 6 e 11 é 2, então 6 dividido por 2 dá 3, que em binário é 11. Espera. Deu 11 e não 10. Confere depois. Agora o processo real. Você começa olhando os bits mais significativos do dividendo. O divisor 11 tem dois bits. Você pega os dois primeiros bits do dividendo, que são 11. Pergunta: 11 cabe em 11? Sim. Coloca 1 no resultado. Subtrai: 11 menos 11 dá 0. Desce o próximo bit, que é 0. Agora você tem 00. Pergunta: 11 cabe em 00? Não. Coloca 0 no resultado. Não tem mais bits para descer. O resto é 00, ou simplesmente 0. O quociente ficou 10. Confusão ali em cima. Deixa eu refazer mais devagar. Dividendo 110. Eu começo comparando o divisor com os bits à esquerda. O divisor 11 tem dois bits. Eu vejo quantos bits o resultado deve ter. 110 tem três bits, 11 tem dois. O quociente provavelmente terá um bit a menos, então dois bits no máximo.
Primeiro passo: pegar os dois bits mais significativos de 110, que são 11. Comparar com o divisor 11. São iguais, então cabe uma vez. Coloco 1 no quociente. Subtraio: 11 menos 11 é 0. Abaixo o próximo bit do dividendo, que é o último 0. Tenho agora 00. Segundo passo: comparar 11 com 00. Não cabe. Coloco 0 no quociente. Não sobra nada pra descer. Processo terminado. Quociente: 10. Resto: 0. Confere em decimal pra saber se fiz algo errado. 110 binário é 6 decimal. 11 binário é 2 decimal. 6 dividido por 2 é 3, que é 11 em binário. O resultado que eu calculei foi 10, que é 2 em decimal. Tá errado. Onde foi o erro?

O erro tá em não considerar que 11 cabe uma vez nos três bits iniciais também. A abordagem correta é: eu tenho 110 e quero ver quantas vezes 11 cabe. Os dois bits mais significativos formam 11. Isso é igual ao divisor. Então eu coloco 1 no quociente e subtraio. Mas aí eu preciso considerar o terceiro bit também. Deixa eu arrumar. O algoritmo de divisão longa binária funciona assim: eu alinhava o divisor à esquerda do dividendo. O divisor 11 ocupa posições de bit 1 e 0. O dividendo 110 ocupa posições 2, 1 e 0. Eu começo pelo bit de maior ordem do dividendo que é o bit 2, que é 1. Eu pego os bits 2 e 1, que formam 11. 11 é maior ou igual a 11. Então eu subtraio 11 de 11, que dá 0, e coloco 1 no quociente na posição correspondente. Agora o bit seguinte. O resto anterior era 0. Eu baixo o bit 0 do dividendo, que é 0. Tenho 00. 00 é menor que 11. Então coloco 0 no quociente. O quociente final é 10 com resto 0.
Isso não está batendo com a conferência decimal. Algo ainda tá errado. Vou fazer diferente. A divisão binária clássica segue exatamente o mesmo raciocínio da divisão decimal longa, só que só existe 0 e 1 como dígitos do quociente. Eu escrevo o dividendo 110 por dentro e o divisor 11 fora. Eu começo olhando o primeiro bit do dividendo. É 1. 1 é menor que 11. Então eu pego os dois primeiros bits: 11. 11 é maior ou igual a 11. Eu coloco 1 no quociente. Eu multiplico 11 por 1, que dá 11. Eu subtraio 11 de 11, que dá 0. Eu baixo o próximo bit, que é 0. Tenho 0. 0 é menor que 11. Eu coloco 0 no quociente. Processo terminado. Quociente: 10. Resto: 0. Confere: 10 binário é 2 decimal. 6 dividido por 2 dá 3, não 2. O quociente deveria ser 11, não 10.
Então onde eu errei? Olhando de novo. Ah. O problema é que quando eu baixo o bit 0, o resto anterior era 0, então eu tenho 00. Mas eu deveria estar olhando para 0 como se fosse 0 seguidos do bit baixado. O resto antes de baixar era 0. Eu baixo o 0 e fico com 00. Mas eu tenho que considerar que o quociente já tem um dígito, então o próximo dígito vai na posição seguinte. Eu acho que o entendimento tá correto, mas a representação tá falha. Deixa eu fazer com notação clara. Posições do dividendo 110: bit 2 vale 1, bit 1 vale 1, bit 0 vale 0. O valor é 4 mais 2 mais 0, que é 6. Eu começo comparando os bits de maior ordem. Eu pego o bit 2 e bit 1, que formam 11 binário, valor 2. O divisor é 11 binário, valor 2. 2 é maior ou igual a 2. Quociente bit: 1. Resto: 11 menos 11 é 0.

Agora eu baixo o bit 0, que é 0. O resto anterior era 0. Eu concatenro 0 com o bit baixado, formando 00, valor 0. 0 é menor que 2. Então o próximo bit do quociente é 0. Quociente final: 10 binário, valor 2. Isso não pode estar certo porque 6 dividido por 2 é 3. Aí eu percebo o erro. Quando eu baixo bits, eu não estou trabalhando com o valor absoluto, estou trabalhando com deslocamentos. O algoritmo correto envolve deslocar o divisor para alinhar com o bit mais significativo do resto atual, não simplesmente bajar bits um a um sem considerar a posição.
Deixa eu refazer do zero com o método de deslocamento. Eu tenho dividendo 110 e divisor 11. Eu começo alinhando o divisor à esquerda do dividendo. O divisor 11 tem 2 bits. O dividendo 110 tem 3 bits. A diferença é 1, então eu deslocaria o divisor 1 posição para a esquerda, ficando 110. Agora eu comparo 110 com 110. São iguais. Eu coloco 1 na posição correspondente do quociente, que seria a posição 1 (contando da direita, começando em 0). Eu subtraio: 110 menos 110 é 0. Não sobra resto. O quociente é 1 na posição 1, mais 0 na posição 0. Resultado: 10 binário. Ainda dá 2.
/n\nEspera. Eu preciso verificar os valores. 110 binário é 6. 11 binário é 2. 6 dividido por 2 é 3. 3 em binário é 11. O quociente deve ser 11, não 10. A minha contagem de posições tá errada. Deixa eu fazer mais cuidadoso. O quociente deve ter quantos bits? Dividendo tem 3 bits, divisor tem 2 bits. O quociente deve ter no máximo 3 menos 2 mais 1, que é 2 bits. Então o quociente pode ter 2 bits no máximo.
Primeiro eu testo se o divisor deslocado cabe uma vez no dividendo. Eu deslocaria o divisor 11 para a esquerda em 1 posição, ficando 110. Eu comparo 110 com o dividendo 110. São iguais. Então eu posso subtrair. Eu coloco 1 no quociente na posição 1. Eu subtraio 110 de 110, ficando 0. Agora eu não tenho mais nada pra subtrair. O próximo passo seria deslocar o divisor para a posição 0, ficando 011, que é 3 decimal. Eu comparo com o resto atual, que é 0. 011 é maior que 0, então eu não posso subtrair. Eu coloco 0 no quociente na posição 0. Quociente: 10. Resto: 0. O problema continua. Algo fundamental está errado na minha lógica. Ah, eu entendi. O quociente não é calculado deslocando o divisor. O quociente é calculado perguntando quantas vezes o divisor cabe no resto atual. Quando eu desço bits do dividendo, eu estou formando novos restos parciais.

Deixa eu tentar uma abordagem diferente, mais próxima do que se faz na prática. Eu seguro o dividendo 110. Eu começo pela esquerda. Eu vejo os dois primeiros bits: 11. Comparo com o divisor 11. 11 é igual a 11, então eu subtraio e obtenho 0. Eu baixo o próximo bit, 0, e fico com 00. 00 é menor que 11, então eu não subtraio nada e coloco 0 no quociente. O quociente resulta 10 e o resto 0. Mas em decimal isso daria 2, não 3. Eu preciso encontrar onde a lógica falha. Espera, deixa eu verificar. Talvez eu tenha entendido mal o problema original. 110 dividido por 11. Se 110 for 6 decimal e 11 for 2 decimal, 6/2 é 3, que é 11 binário. O quociente deve ser 11.
Como chegaria em 11? Para o quociente ser 11, eu precisaria de dois bits iguais a 1. Isso significaria que em algum momento eu encontrei duas subtrações bem-sucedidas. Deixa eu refazer com o algoritmo clássico mesmo. Eu coloco 110 por dentro e 11 por fora. Eu começo pelo bit mais significativo. Eu pego o primeiro bit, 1. É menor que 11. Eu pego mais um bit: 11. 11 é maior ou igual a 11. Eu coloco 1 no quociente. Eu subtraio: 11 menos 11 é 0. Eu baixo o próximo bit: 0. Eu tenho 0. 0 é menor que 11. Eu coloco 0 no quociente. Terminou. Quociente 10. Isso é inconsistente com a matemática. A menos que o dividendo não seja 110 em binário igual a 6 decimal. 110 em binário: o primeiro bit da esquerda é o bit 2, que vale 4. O segundo bit é o bit 1, que vale 2. O terceiro bit é o bit 0, que vale 1. O valor é 4 mais 2 mais 0, igual a 6. Sim, tá certo.
11 em binário: o primeiro bit é o bit 1, que vale 2. O segundo bit é o bit 0, que vale 1. Valor: 2 mais 1, igual a 3. Espere. 11 binário é 3 decimal, não 2 decimal. Eu estava errado anteriormente. 11 binário é 3. Então 6 dividido por 3 é 2. 2 em binário é 10. O quociente 10 está correto. Meu erro foi achar que 11 binário era 2 decimal. Na verdade é 3. Tudo bate agora. Divisão binária de 110 por 11 resulta em quociente 10 e resto 0. conferência decimal: 6 dividido por 3 é 2, que é 10 binário. Fechou.

o problema que eu encontrei na prática
Na primeira vez que implementei divisão binária num projeto pequeno, eu esqueci de lidar com o caso em que o resto parcial é zero antes de baixar o próximo bit. O algoritmo simplesmente tentava continuar e gerava bits extras no quociente que não deviam existir. A solução foi adicionar uma verificação: se o resto parcial é zero e ainda há bits pra baixar, eu baixo o bit e continuo normalmente, sem pular etapas. Também é comum errar na contagem de bits quando o dividendo tem bits significativos zero no início. Um erro clássico é considerar bits à esquerda que não fazem parte do número, gerando quocientes com tamanho errado. O workaround simples é contar quantos bits o dividendo realmente tem antes de começar o processo, ignorando zeros à esquerda.
insights que ninguém conta
Uma coisa contra-intuitiva é que a divisão binária é essencialmente uma série de subtrações encadeadas. Em hardware, isso significa que divisões longas podem ser lentas porque cada passo depende do anterior. Se você precisa de velocidade, tabelas de reciprocidade e métodos de Newton-Raphson são alternativas, mas exigem mais lógica. O outro ponto é que o resto sempre é menor que o divisor. Isso é garantido pelo algoritmo. Se alguma etapa do cálculo produzir um resto maior ou igual ao divisor, você errou em algum passo anterior. Esse é um teste rápido de integridade útil quando você está validando implementação própria. Outro detalhe prático: em linguagens de programação, Operadores de desvio à direita e módulos fazem o trabalho pra você. Mas entender o processo manual ajuda a debuggar quando o resultado não bate com o esperado. A maioria dos bugs em divisões binárias vem de confusão entre deslocamento de bits e operação aritmética real. São coisas parecidas visualmente, mas semanticamente diferentes.
