Conversão de base numérica
# Conversão de base numérica

Conversão de base numérica é a passagem da representação de um número de uma base numérica para outra, alterando a simbologia para se adequar à nova base. A base que normalmente usamos é a decimal ou base dez, pois contém dez algarismos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9). Por exemplo, o número inteiro representado em base decimal como 10, pode ser escrito como '1010' em base binária ou 'A' em base hexadecimal.

## Bases numéricas

O homem contemporâneo está familiarizado com a base 10 (decimal), no dia-a-dia, já os computadores atuais trabalham exclusivamente com a base 2 (binário), assim é preciso fazer conversões entre estas bases quando se pretende inserir algum valor para ser processado pelo computador. A diferença de interpretação se mostra a seguir:
    $1010_{2}=1\cdot 2^{3}+0\cdot 2^{2}+1\cdot 2^{1}+0\cdot 2^{0}=8+0+2+0=10_{10},$
    $10=1\cdot 10^{1}+0\cdot 10^{0}.$
onde se usou o índice 2 para indicar que o número inicial 1010 se encontra representado no sistema de numeração binário, ou base 2, enquanto que o número final 10 está representado no sistema de numeração decimal, ou base 10.
Em calculadoras e computadores, a conversão de números para o binário para a operação interna, e depois, para o decimal na visualização é um processo interno pré-programado para ser feito por ela. O ponto a ser entendido aqui é que internamente ela faz tudo em binário, em outras palavras: ela converte o que foi digitado para binário, faz o cálculo, converte o resultado para decimal e apresenta o resultado.
No entanto quando se está escrevendo um programa é normal a introdução de valores no meio do código, e em muitas situações a digitação de códigos binários é muito complicada/longa para o programador, então existem outros códigos que facilitam a digitação, na prática é muito utilizada a base 8 (octal), e a base 16 (hexadecimal), ambas derivadas da base 2 (note que estas bases facilitam a digitação somente, de qualquer forma ao ser compilado toda e qualquer base usada para escrever o programa é convertida para base 2 para que o valor seja usado pelo processador).
A medida angular de um grau é dividida em 60 minutos de arco, e cada minuto de arco em 60 segundos de arco. Trata-se de uma unidade de medida usada em astronomia e geometria.
Nas medidas usuais de tempo, uma hora é dividida em 60 minutos, e cada minuto em 60 segundos. Além das unidades de tempo usadas no cotidiano, existem ainda várias frações do segundo, que estão por sua vez em base decimal. Estas são mais freqüentemente utilizadas em Física.

## Exemplos

Valores numéricos representados em algumas bases :
| 10 (Decimal) | 2 (Binário) | 8 (Octal) | 16 (Hexadecimal) | 60 (Sexagesimal) |
| 0 | 0 | 0 | 0 | 0 |
| 3 | 11 | 3 | 3 | 3 |
| 10 | 1010 | 12 | A | 10 |
| 15 | 1111 | 17 | F | 15 |
| 301 | 100101101 | 455 | 12D | 5,1 |
| 1379 | 10101100011 | 2543 | 563 | 22, 59 |
| 42685 | 1010011010111101 | 123275 | A6BD | 11, 51, 25 |
Repare que quanto maior a base, o número de símbolos usados para representar o mesmo valor será menor que nas bases menores, é isso que facilita a digitação e memorização dos valores.
Nota-se a existência de virgula entre os símbolos com valores menores que 60 na coluna da base sexagesimal, pois se trata de uma notação posicional, que de acordo com o autor Asger Aaboe, ao utilizar-se como comparativo as bases decimais, para descrever a utilização da virgula na base sexagesimal, expressa-se por "As semelhanças entre nosso próprio sistema numérico e o dos Babilônios são varias: nós, como eles, empregamos um número finito de símbolos ou algarismos (nós usamos dez) para exprimir todos os inteiros; fazemos também estes algarismos cumprirem sua missão atribuindo importância a suas posições, de modo que com cada mudança de casa para a esquerda, seu valor seja multiplicado por um fator constante (conosco, 10, com os babilônios, 60). Nós como eles, usamos uma extensão deste principio para exprimir certas frações (frações decimais em nosso caso) fazendo valer mesmo além da casa para a direita significa dividir seu valor pelo fator constante 10, ou 60, que desempenham um papel tão crucial, são chamados as bases dos dois sistemas numéricos, que são designados respectivamente por sistema decimal e sexagesimal; e da mesma maneira que falamos de frações decimais, chamamos suas correspondentes babilônias de frações sexagesimais."
Repare também que no caso da simbologia da base hexadecimal são usadas algumas letras, isso ocorre porque temos símbolos para representar somente os algarismos de 0 a 9, como na base 16 é necessária a representação de algarismos de 10 a 15 então as letras de A até F são utilizadas para isso resultando na sequência: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

## Conversões

A conversão entre bases pode ser realizada por meio de divisões sucessivas, que funciona para qualquer combinação de bases, ou então, para os casos em que a base de origem e de destino pertencem a mesma base logarítmica, a conversão pode ser feita simplesmente por reagrupamento dos algarismos.

### Divisões sucessivas

Neste método uma das bases tem que ser a decimal. Assim se nenhuma delas for decimal é necessário primeiro converter a base de origem para decimal e então converter para base de destino.
Tomemos o exemplo da conversão do número base 10 (decimal), 745 para a base 4. Uma série de divisões inteiras é realizada até que o valor zere, o divisor usado é o valor da base de destino e os restos das divisões inteiras é a sequência de algarismos da base de destino. Como a base de origem é decimal podemos usar o método diretamente:
* $745/4=186\rightarrow 1$
* $186/4=46\rightarrow 2$
* $46/4=11\rightarrow 2$
* $11/4=2\rightarrow 3$
* $2/4=0\rightarrow 2$
Portanto $745_{10}=23221_{4}$
Outro exemplo $4C_{18}$ para a base 7:
Como o valor de origem está na base 18 primeiro precisamos convertê-lo para a base 10:
$4C_{18}=4*18^{1}+12*18^{0}=72+12=84_{10}$
Agora sim aplicamos as divisões:
* $84/7=12\rightarrow 0$
* $12/7=1\rightarrow 5$
* $1/7=0\rightarrow 1$
Assim: $4C_{18}=84_{10}=150_{7}$
Mais um exemplo: converter $652_{8}$ para a base 3:
$652_{8}=6*8^{2}+5*8^{1}+2*8^{0}=384+40+2=426_{10}$
* $426/3=142\rightarrow 0$
* $142/3=47\rightarrow 1$
* $47/3=15\rightarrow 2$
* $15/3=5\rightarrow 0$
* $5/3=1\rightarrow 2$
* $1/3=0\rightarrow 1$
Assim: $652_{8}=426_{10}=120210_{3}$

### Reagrupamento

Quando as bases envolvidas são da mesma base logarítmica então a conversão pode ser facilmente feita por simples reagrupamentos dos algarismos e uso de pequenas tabelas de conversão. Por exemplo, entre as bases 16 e 8 ou entre 2 e 16 ou ainda entre as bases 27 e 9.
Na prática é muito usada a conversão entre as bases 2, 8 e 16 pelos motivos citados anteriormente. Segue uma tabela básica para estas conversões:
Tabela de conversão de bases de origem binária :
| Decimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| Binário | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
| Octal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| Hexadecimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
Convertendo $111010110_{2}$ para a base 16:
Pela tabela vemos que para cada algarismo em hexadecimal são necessários 4 algarismos para realizar sua representação em binário. Então o primeiro passo é separar o valor em base 2 em blocos de 4 algarismos:
$111010110_{2}=1.1101.0110$
Depois, consultando a tabela convertemos o valor de cada bloco para seu equivalente hexadecimal, assim teremos:
$111010110_{2}=1.D.6_{16}=1D6_{16}$
Convertendo $111010110_{2}$ para base 8:
Pela tabela vemos que para cada algarismo em octal são necessários 3 algarismos para realizar sua representação em binário. Então devemos separar o valor em base 2 em blocos de 3 algarismos:
$111010110_{2}=111.010.110$
Depois, consultando convertemos o valor de cada bloco para seu equivalente octal, assim teremos:
$111010110_{2}=7.2.6_{8}=726_{8}$
Finalmente uma conversão do valor $3A8_{16}$ para octal:
Primeiro convertemos para os blocos binários equivalentes com 4 dígitos:
$3A8_{16}=3.A.8_{16}=0011.1010.1000_{2}=1110101000_{2}$
Agora reagrupamos em blocos de 3 dígitos:
$1110101000_{2}=1.110.101.000_{2}=1.6.5.0_{8}$
Assim: $3A8_{16}=1650_{8}$

### Conversão de decimal para binário

A técnica de divisões sucessivas é utilizada para conversão de números inteiros do sistema decimal para o binário. Esta técnica consiste em dividir o número original pela base 2, o resto da divisão será um dígito e o resultado da divisão é novamente dividido por 2. Esta última etapa se repete até que o resultado da divisão seja zero. Para melhor compreensão do método, a imagem ao lado mostra um exemplo de conversão do número decimal 19 para binário.
Como mostra o exemplo, após as sucessivas divisões, os dígitos (resto da divisão) são ordenados a partir da esquerda para direita, formando assim o código binário.
Para a conversão de números fracionários, é utilizada a técnica de multiplicações sucessivas, no entanto, a parte inteira do número ainda é convertida pelo método das divisões sucessivas. Neste método, multiplica-se o número fracionário por 2 (base do sistema binário) e a parte inteira do número resultante é o primeiro dígito fracionário do binário. A parte fracionária restante é novamente multiplicada por 2 e a parte inteira do número resultante é o segundo dígito fracionário do binário. Esses passos são seguidos até que o resultado da multiplicação seja um número inteiro ou até a precisão desejada.

#### Exemplo

    Conversão do número 19,6875
Do exemplo anterior: (19)$_{10}$ = (10011)$_2$ 0,6875 x 2 = 1,375 0,375 x 2 = 0, 75 0,75 x 2 = 1,5 0,5 x 2 = 1,0 – fim. (19,6875)$_{10}$ = (10011,1011)$_2$
Se as divisões sucessivas forem feitas com o uso de uma calculadora, é possível saber o resto da divisão da seguinte forma: se o resultado é um número inteiro, então o resto é 0; se o resultado tem parte fracionária, então o resto é 1. Lembre que quando o resultado for fracionário, utiliza-se somente a parte inteira para realizar a próxima divisão.

### Conversão de qualquer base para decimal

É feito usando a fórmula de série $\sum _{j=0\#k}a_{k-j}b^{k-j}$, em que:
* $b$ é a base atual do número
* $a_{k-j}$ são os algarismos que formam o número na base atual, dispostos em ordem left-right, com algarismos de maiores valores relativos sendo os com maiores índices e estando mais à esquerda
* k é a quantidade de algarismos inteiros - 1 que o número possui na base atual

#### Conversão de decimal para decimal

$5874_{10}=a_{3-0}b^{3-0}+a_{3-1}b^{3-1}+a_{3-2}b^{3-2}+a_{3-3}b^{3-3}=a_{3}b^{3}+a_{2}b^{2}+a_{1}b^{1}+a_{0}b^{0}=5*10^{3}+8*10^{2}+7*10^{1}+4*10^{0}$
Observe que essa fórmula se estende a números racionais: $63,5274_{10}=a_{1}b^{1-0}+a_{0}b^{1-1}+a_{-1}b^{1-2}+a_{-2}b^{1-3}+a_{-3}b^{1-4}+a_{-4}b^{1-5}=6*10^{1}+3*10^{0}+5*10^{-1}+2*10^{-2}+7*10^{-3}+4*10^{-4}$

#### Conversão de binário para decimal

A conversão de números da base 2 para base 10 é bastante simples. Basta reescrever o número numa expansão de base 2, conforme o exemplo abaixo. (0110)$_2$ = 0$_{(3)}$1$_{(2)}$1$_{(1)}$0$_{(0)}$ 0*2³ + 1*2² + 1*2¹ + 0*2$^0$ = 0 + 1*4 + 1*2 + 0 = 4 + 2 = (6)$_{10}$

#### Conversão de octal para decimal

A conversão de números da base 8 para base 10 é muito semelhante à conversão de binário para decimal. Basta reescrever o número numa expansão de base 8, conforme o exemplo a seguir. (372)$_8$ = 3*8$^2$ + 7*8$^1$ + 2*8$^0$ = 3*64 + 7*8 + 2*1 = (250)$_{10}$

### Conversão de octal para binário

A conversão de números de base 8 para a base 2 é feita convertendo cada dígito no seu equivalente binário de 3 bits. A tabela abaixo mostra o equivalente binário de cada dígito do sistema octal:
| Dígito octal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| Binário equivalente | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
Por exemplo, para converter (472)$_8$ em binário, devemos substituir os números: 4 em 100; 7 em 111; 2 em 010; Desta forma, obtemos o número binário 100111010.

### Conversão de binário para octal

Para fazer a conversão de números binários para octais, utiliza-se a mesma tabela de conversão utilizada para converter números octais em binários. Para isso, cada grupo de 3 bits do sistema binário é convertido em seu dígito equivalente do sistema octal conforme exemplo a seguir:
O binário 100111010 tem os seguintes grupos de 3 bits: 100, 111 e 010. Assim, o seu equivalente em octal é o número 472. Caso o binário não tenha grupos regulares de 3 bits, podem ser adicionados até 2 0s à esquerda do número. Por exemplo, o binário 11010110 pode ser adicionado de 1 zero, passando a ser composto pelos grupos 011, 010 e 110.

### Conversão de decimal para hexadecimal

Da mesma maneira que é feita a conversão de decimal para binário, a conversão para hexadecimal é feita utilizando as divisões sucessivas. Entretanto, nesse caso, as divisões dos números inteiros são feitas por 16.

### Conversão de hexadecimal para binário

Para transformar números hexadecimais em binários, cada dígito hexadecimal deve ser convertido no seu equivalente binário de 4 bits, conforme a tabela (X). Por exemplo, o número (BA6)$_{16}$ = 101110100110 , já que B equivale a 1011, A equivale a 1010 e 6 equivale a 0110.

### Conversão de binário para hexadecimal

Fazendo o inverso do processo anterior, é possível transformar números binários em hexadecimais. Ou seja, deve-se converter os grupos de 4 bits do sistema binário em seus dígitos equivalente do sistema hexadecimal. Assim como para conversão de sistema binário em octal, são acrescentados 0s para completar os grupos do sistema binário quando necessário.
Exemplo: Para converter o número 1110100110, são adicionados dois zeros a esquerda do número, formando os grupos de 4 bits 0011, 1010 e 0110. Convertendo nos equivalentes em hexadecimal, temos o número 3A6.