Membros

domingo

Conversão de Números Decimais Para a Base Binária e Vice-Versa

Por mais complexo que possa parecer um computador com seus programas, componentes internos e todas a maravilhas digitais, é interessante observar que todas elas baseiam-se no sistema de numeração binária que aliás foi contemplado por Leibniz no século [;XVII;] afirmando em sua metafísica que Deus representaria o [;1;] e o [;0;] representaria o "Nada". Da combinação de 1´s e zeros temos todos os números reais escritos em base binária e da junção de Deus e o Nada, temos a criação do mundo. Neste post, veremos um método para conversão de números representados no sistema decimal para o binário e vice-versa.
Dado um número [;N;] na base [;\beta;], isto é, [;N = (a_ja_{j-1}\ldots a_2a_1a_0)_{\beta};], sendo [;0 \leq a_k \leq \beta - 1;]com [;k = 1,\ldots, j;] podemos também representá-lo na forma polinomial:
[;N = a_j\beta^j + a_{j-1}\beta^{j-1}+\ldots + a_2\beta^2 + a_1\beta^1 + a_0\beta^0;]

Por exemplo, para beta [;\beta = 10;], temos:

i) [;(3148)_{10} = 3\times 10^3 + 1\times 10^2 + 4\times 10^1 + 8;]

ii) [;\frac{4}{3} = 1\times 10^1 + 3\times 10^{-1} + 3\times 10^{-2} + 3\times 10^{-3}+\ldots;] 

Para o caso em que [;\beta = 2;], teremos uma soma de potências de [;2;]. Por exemplo, o número [;(1011)_2;] corresponde ao número [;11;] em nossa base decimal. De fato,
[;(1011)_2 = 1\times 2^3 + 0\times 2^2 + 1\times 2^1 + 1\times 2^0;]
[;= 2(1\times 2^2 + 0\times 2^1 + 1) + 1\times 2^0;]
[;=2(2(1\times 2 + 0) + 1) + 1 = (11)_{10};]
Observe que o fator [;2;] foi colocado em evidência duas vezes, mas poderia ser mais vezes conforme o tamanho do número escrito na forma binária. De qualquer modo, deste exemplo podemos obter um processo para converter um número representado no sistema binário para o sistema decimal.
Seja [;b_0;] a representação decimal do número [;(a_ja_{j-1}\ldots a_2a_1a_0)_2;]. Assim,
[;\begin{cases}b_j = a_j\\b_{j-1} = a_{j-1} + 2b_j\\b_{j-2} = a_{j-2} + 2b_{j-1}\\\ldots \qquad \ldots\\b_1 = a_1 + 2b_2\\b_0 = a_0 + 2b_1\\\end{cases};]
Para o número [;(1011)_2;], a sequência obtida é
[;\begin{cases}b_3 = a_3 = 1\\b_2 = a_2 + 2b_3 = 0 + 2\cdot 1 = 2\\b_1 = a_1 + 2b_2 = 1 + 2\cdot 2 = 5\\b_0 = a_0 + 2b_1 = 1 + 2\cdot 5 = 11\\\end{cases};]
Considere agora um número entre [;0;] e [;1;], representado no sistema de numeração binária que será denotado por
[;(r)_2 = (0.d_1d_2\ldots d_j\ldots)_2;]
Para obter sua representação no sistema decimal, definimos [;r_1 = r;] e a cada iteração [;k;], o processo de conversão multiplica o número [;r_k;] por [;(10)_{10};] e obtém o dígito [;b_k;] como sendo a parte inteira deste produto convertido para a base decimal. É importante observar que as operações devem ser efetuadas no sistema de numeração binário.

Exemplo 1: Converta o número [;(r)_2 = 0.011;] para a base decimal.

Resolução: Neste post, usarei o ponto ao invés da vírgula para separar a parte inteira da decimal dos números. Pelo procedimento acima, temos [;r_1 = r = 0.011;]. Considere a sequência de operações dadas por
[;w_1 = (1010)_2\times r_1 = 1010\times 0.011 = 11.11 \quad \Rightarrow;] [;\quad b_1 = 3 \quad \text{e} \quad r_2 = 0.11;],
[;w_2 = (1010)_2\times r_2 = 1010\times 0.11 = 111.1 \quad \Rightarrow;] [;\quad b_2 = 7 \quad \text{e} \quad r_3 = 0.1;],
[;w_3 = (1010)_2\times r_3 = 1010\times 0.1 = 101 \quad \Rightarrow;] [;\quad b_3 = 5 \quad \text{e} \quad r_4 = 0;]
Como o último resto [;r_4;] é nulo, terminamos o processo de conversão. Logo, [;(0.011)_2 = (0.375)_{10};].


Veremos agora um procedimento para converter um número inteiro representado no sistema decimal para o sistema de numeração binária. Para facilitar o entendimento, explicaremos através de um exemplo.

Exemplo 2: Converta o número [;186;] para a base binária.

Resolução: Seja [;(a_ja_{j-1}\ldots a_1a_0)_2;] a sua representação na base [;2;]. Temos então que

[;186 = 2(a_j\times 2^{j-1} + a_{j-1}\times 2^{j-2}+\ldots + a_2\times 2 + a_1) + a_0;]
[;= 2\times 93 + 0 \quad \Rightarrow \quad a_0 = 0;]


ou seja, o último dígito representa o resto da divisão de [;186;] por [;2;]. Repetindo este processo para o número [;N_1 = 93 = 2\times 46 + 1;], segue que [;a_1 = 1;] e assim sucessivamente, obtemos:


[;N_2 = 46 = 2\times 23 + 0 \quad \Rightarrow \quad a_2 = 0;]


[;N_3 = 23 = 2\times 11 + 1 \quad \Rightarrow \quad a_3 = 1;]


[;N_4 = 11 = 2\times 5 + 1 \quad \Rightarrow \quad a_4 = 1;]


[;N_5 = 5 = 2\times 2 + 1 \quad \Rightarrow \quad a_5 = 1;]


[;N_6 = 2 = 2\times 1 + 0 \quad \Rightarrow \quad a_6 = 0;]


[;N_7 = 1 = 2\times 0 + 1 \quad \Rightarrow \quad a_7 = 1;]

Logo, [;(186)_{10} = (10111010)_2;].

Consideremos agora a conversão de um número fracionário da base [;10;] para a base [;2;]. Dizemos que um número racional [;r;], [;0 \prec r \prec 1;] tem representação finita se ele possui um número finito de casas decimais. Por exemplo, [;r = 0.125;] e [;s = 0.0362;].


Dado um número entre [;0;] e [;1;] no sistema decimal, como obter sua representação binária? Explicaremos o processo através de um exemplo, convertendo o número [;0.1875;] para o sistema de numeração binária. Note que existem dígitos binários [;d_1;], [;d_2;], [;\dots;], [;d_j;],[;\ldots;] tais que


[;(0.1875)_{10} = (0.d_1d_2\ldots d_j\ldots)_2;]
ou
[;(0.1875)_{10} = d_1\times 2^{-1} + d_2\times 2^{-2}+\ldots + d_j2^{-j}+\ldots;]

Multiplicando a expressão acima por [;2;], temos:
[;2\times 0.1875 = d_1 + d_2\times 2^{-1}+\ldots + d_j2^{-j+1}+\ldots;]


[;0.375 = d_1 + d_2\times 2^{-1} + \ldots + d_j\times 2^{-j + 1}+\ldots \quad \Rightarrow \quad d_1 = 0;]


ou seja, [;d_1;] representa a parte inteira de [;2\times 0.1875;] que é igual a zero e [;d_2\times 2^{-1}+\ldots + d_j\times 2^{-j+1}+\ldots;] representa a parte fracionária de [;2\times 0.1875;] que é [;0.375;]. Aplicando o procedimento para [;0.375;], temos


[;2\times 0.375 = 0.75 = d_2 + d_3\times 2^{-1}+\ldots + d_j\times 2^{-j+2}+\ldots \quad \Rightarrow;]
 [;\quad d_2 = 0;]


[;2\times 0.75 = 1.5 = d_3 + d_4\times 2^{-1}+\ldots + d_j\times 2^{-j+3}+\ldots \quad \Rightarrow;]
 [;\quad d_3 = 1;]


[;2\times 0.5 = 1 = d_4 + d_5\times 2^{-1}+\ldots + d_j\times 2^{-j+4}+\ldots \quad \Rightarrow;]


[;\quad d_4 = 1 \quad \text{e} \quad d_j = 0, \ \forall j \geq 5;]


Observação: Um número real entre [;0;] e [;1;] pode ter representação finita no sistema decimal, mas representação infinita no sistema binário.

Exercício: Converta os números abaixo:
1) [;(65)_{10};] para a base binária.
R:  [;(1000001)_{2};]

2) [;(1/3)_{10};] para a base binária.
R:  [;(0.01010101\ldots)_2;]

3) [;(\sqrt{2})_{10};] para a base binária. Sugestão: Considere [;\sqrt(2) = 1.4142135;]
R:  [;(1.011010100001\ldots)_2;]

4) [;(10101110)_2;] para a base decimal.
R:  [;174;]

Gostará de ler também:
- Advinhando com o Sistema de Numeração Binário;
- Advinhando com os Dominós;
- Sequências Aproximantes Para Raízes Quadradas;
- Zeros de Funções (Parte 1);
- Zeros de Funções (Parte 2).

15 comentários:

  1. Excelente Paulo, sistemas de numerção são realmente muito interessantes. Creio que logo fará algo sobre base sexagesimal. Lembro-me (mais ou menos) de uma história sobre a conversão de números decimais que quando convertidos para o binário, geravam um erro de aproximação, devido ao arredondamento. Acho que eram os terminados em 5. Isso causou um problema enorme para os EUA quando utilizavam os mísseis Patriot para combater os mísseis Scud na Guerra do Golfo em 91. Ocorria que os Patriots não estavam sendo eficazes e os Scuds rompiam o céu acertando seus alvos. Imagine gastar milhões em um míssil que serviria para destruir no ar os mísseis inimigos, mas que "passavam direto". Bem, detectaram um erro de arredondamento na vigésima casa decimal! Passaram então a utilizar uma precisão de 50 casas decimais! Essa é a matemática aplicada na guerra. É um meio ruim de aplicação, mas todos sabemos que foram as guerras e conquistas que trouxeram avanços no ramos científico.
    Um abraço!

    ResponderExcluir
  2. Bem interessante esta história. Temos muitos outros fatos históricos em que a Matemática foi usada, apoiada e desenvolvida para fins militares. Por exemplo, Pierre S. de Laplace que apoiava Napoleão não foi decapitado, pois ele era muito útil para realizar os cálculos balísticos e computadores foram desenvolvidos por causa da criptografia e balística, ou seja, fins militares. Obrigado pelo comentário e volte sempre!

    ResponderExcluir
  3. No fim, podemos concluir que os matemáticos vivem mais! rss

    É sempre um prazer voltar sempre!

    Um abraço.

    ResponderExcluir
  4. Olá professor, creio que ocorreu um erro de digitação na resolução do exemplo 2: faltou um “2” dentro dos parênteses, não seria “+...+a₂×2+a₁)” em vez de “+...+a₂×+a₁)”?

    Um pouco mais abaixo na resolução do mesmo exemplo 2, talvez seria "N₂=46=2×23+0" em vez de "N₂=2×46+1"

    abraços

    ResponderExcluir
  5. Obrigado Pedro Roberto, pela leitura atenta do post. Os problemas de digitação já foram corrigidos. Faço um esforço para minimizar os erros, mas como disse Américo do blog Problemas e Teoremas, não consigo me ver livre deles. Agradeço novamente pelo comentário e volte sempre!

    ResponderExcluir
  6. Olá, Paulo!
    Excelente post e utilíssimo também, pois nos tempos de hoje, quem se dedica às práticas da computação e da informática, em suas fases avançadas, tanto para os estudos, pesquisas e/ou os seus desenvolvimentos, tem que ter o domínio dos sistemas de numeração, sendo particularmente, o sistema binário, o mais importante deles. Parabéns mais uma vez!
    Um abraço!!!!!

    ResponderExcluir
  7. Valdir, este assunto é realmente de grande utilidade, pois mostra uma aplicação direta dos conhecimentos matemáticos no nosso mundo digital. E depois muitos falam que a Matemática não serve para nada? o que faltam para essas pessoas é humildade, curiosidade e paciência para entender esta maravilhosa ciência. Obrigado pelo comentário. Abraços!

    ResponderExcluir
  8. Sem dúvida um post interessantíssimo...é um assunto que sempre gera dúvidas e dificuldades entre os alunos.
    Parabéns professor Paulo!!

    ResponderExcluir
  9. Obrigada Mari pelo comentário, fico agradecido por esses comentários motivadores. Abraços e volte sempre!

    ResponderExcluir
  10. Olá professor, agradeço pelo o assunto que o senhor tinha prometido fazer um tópico. Uma grande problema do sistema binário com vírgula é em armazenar números que são resultados da divisão não-inteira de qualquer número que não é potência de 2. E de fato, um computador não consegue armazenar o número 1,1 por exemplo. Pois ele só pode armazenar uma quantidade finita de números. É interessante, nesse caso, o uso de frações, pois evitam essas perdas de arredondamento.

    Parabéns pelo post.

    ResponderExcluir
  11. Eu que agradeço pela sua sugestão e como eu já tinha estudado este assunto algum tempo, resolvi compartilhar com todo vocês. Realmente, o arredondamento as vezes nos conduzem a erros grosseiros como o Kleber comentou. Obrigado pelo comentário e volte sempre!

    ResponderExcluir
  12. Professor parabéns pelo post você tem algum artigo falando da álgebra linear aplicada a estatística? Gostaria de conhecer mais sobre o tema. Se ainda não escreveu nada poderia me dizer como devo direcionar minha pesquisa?

    ResponderExcluir
  13. Na Estatística, podemos aplicar a Álgebra Linear mais específicamente a parte de produto interno no cálculo de ajustes de curvas e minimos quadrados. Para saber mais consulte o livro de Álgebra Linear do Boldrini. Obrigado pela visita e volte sempre.

    ResponderExcluir
  14. Tem um site que converte todos as bases , binário, octal, hexadecinal ate a base 36 e ainda aceita virgula(fração) http://conversorbinariovirgula.hd1.com.br/
    é só usar as tabelas de baixo!
    espero ter ajudado.

    ResponderExcluir
  15. Parabéns pelo Blog. ! Esta excelente !!!!

    ResponderExcluir