Esse blog é de caráter pessoal e destina-se aos alunos e companheiros interessados em Matemática.
Sendo a internet uma vasta rede de informações que se perde em quantidade de conteúdo, o que pretendemos é juntar todas essas informações em um local que meus alunos possam ter acesso de forma mais simples. Logo para construção desse blog o que estamos fazendo é garimpando na rede tudo que consideramos relevante e postando em um único lugar.

quarta-feira, 29 de fevereiro de 2012

CONVERSÃO DE NÚMEROS DECIMAIS PARA A BASE BINÁRIA E VICE-VERSA


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, internet e todas a maravilhas digitais 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  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;]


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;]