Conversão de base numérica

No texto sobre álgebra booleano conversamos um pouco sobre formas de representar números. Hoje vamos aprofundar na conversão de bases numéricas.

Começando do começo

Com nossos algarismos indo-arábicos usamos a base 10. Ou seja, há 10 símbolos que representam qualquer número. Para um sistema computacional, a base utilizada é a 2, como você deve imaginar. Isso quer dizer que todas as representações utilizam 2 símbolos, o 0 e o 1. A seguir vamos ver como transformamos um número em base 10 para base 2: Para descrobrirmos qual a representação do número 9 (base 10) para base 2, divimos o mesmo por 2 sucessivamente:

9 / 2 = 4 (resta 1)
4 / 2 = 2 (resta 0)
2 / 2 = 1 (resta 0)

Quando o resultado da divisão inteira for 1, o método para e você já tem a resposta da conversão. O primeiro dígito binário é o resultado da última divisão; 1. A seguir aparecem os restos das divisões de baixo para cima; 001. Ou seja, 9 em base 2 é 1001.
Vamos repetir o método para alguns números

8 / 2 = 4 (resta 0)
4 / 2 = 2 (resta 0)
2 / 2 = 1 (resta 0)
8 em base 2 é 1000

21 / 2 = 10 (resta 1)
10 / 2 = 5 (resta 0)
5 / 2 = 2 (resta 1) )
2 / 2 = 1 (resta 0)
21 em base 2 é 10101

E o caso contrário ?

Eu tenho o número 1101 na base binária e quero saber qual sua representação na base decimal. Multiplicaremos cada dígito desse numero por 2 elevado a uma potência incremental (da direita pra esquerda). Ok, ficou mais confuso do que parece, veja abaixo:

1101 = 1*23 + 1*22 + 0*21 + 1*20 = 8 + 4 + 0 + 1 = 13

Para tirar a prova, vamos utilizar um número que convertemos na seção anterior, o 1001 (que deve dar 9):

1001 = 1*23 + 0*22 + 0*21 + 1*20 = 8 + 0 + 0 + 1 = 9

Satisfeito? 🙂 Não?
Vamos pegar um número maior então, 101010:

101010 = 1*25 + 0 + 1*23 + 0 + 1*21 + 0 = 32 + 8 + 2 = 42

E se eu estiver em outra base?

Ok, mas isso é útil? Bom, algumas linguagens de programação utilizam outras bases númericas diferentes da base 10. Por exemplo, o PHP é uma linguagem para criar sistemas web e ele tem suporte a base 8, ou números octais. Você pode testar o código abaixo no seu terminal php ou no site writephponline.

</pre>
<pre><code class="php"><span class="line"><span class="o"><?</span><span class="nx">php</span>
</span><span class="line">    <span class="nv">$foo</span> <span class="o">=</span> <span class="mo">013</span><span class="p">;</span>
</span><span class="line">    <span class="nv">$bar</span> <span class="o">=</span> <span class="nv">$foo</span> <span class="o">+</span> <span class="mi">5</span><span class="p">;</span>
</span></code>

Qual o valor da variável $bar no fim do código? 18? Não. O valor é 16.
Se você nunca trabalhou com php,  números na linguagem que começam com 0 (da esquerda pra direita) são automaticamente interpretados como base 8. Questões relacionadas a octais caem muito na prova ZCE, a certificação da linguagem,, então vamos a seguir fazer a conversão do octal 013 para decimal, para que assim tenhamos a prova da “hipótese” de que o resultado é 16.
A verdade é que não há nenhuma regra nova, a conversão de binário para decimal e de octal para decimal seguem o mesmo método, porém a base muda de 2 para 8 então …

013 = 0*82 + 1*81 + 3*80 = 0 + 8 + 3 = 11

Viram a diferença? Multiplicamos cada dígito por 8 elevado a um expoente incremental (incremental da direita pra esquerda).

Base 16

Hexadecimais! 16 símbolos para representar qualquer número. Os símbolos são :

Símbolo Valor
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
a 10
b 11
c 12
d 13
e 14
f 15

Sendo redundante: A regra pra conversão de hexadecimal para decimal é a mesma, vamos converter o número #f00 para decimal:

f00 = f*162 + 0*161 + 0*160 = 15*162 + 0*161 + 0*160 = 15*256 + 0 + 0 = 3840 .

Perceba que usamos a tabela para converter as letras por valores numéricos, nada além disso.

Conclusão

Com essas regrinhas, não há o que temer :). Dúvidas? Mande um comentário e nos vamos no próximo post.