1.200.000 VISUALIZAÇÕES! OBRIGADO!!

terça-feira, 19 de abril de 2011

Conversão de base numérica

Introdução

Atualmente é muito comum o uso de bases numéricas derivadas de 2 ao se utilizar computadores em baixo nível (quando se programa um, por exemplo).

O humano 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.

Obviamente que ninguém vai ficar convertendo números para o binário para então digitá-lo na calculadora e depois converter o resultado para decimal para usá-lo. Esse processo de conversão está, no caso da calculadora, 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).

Exemplos

Valores numéricos representados em algumas bases
10 (Decimal) 2 (Binário) 8 (Octal) 16 (Hexadecimal)
0 0 0 0
3 11 3 3
10 1010 12 A
15 1111 17 F
301 100101101 455 12D
1379 10101100011 2543 563
42685 1010011010111101 123275 A6BD

Repare como na base maior (hexadecimal), o número de símbolos usados para representar o mesmo valor é bem menor que nas bases menores, é isso que facilita a digitação e memorização dos valores.

Repare também que no caso da simbologia da base haxadecimal 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.

[editar] 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\rightarrow1
  • 186/4 = 46\rightarrow2
  • 46/4 = 11\rightarrow2
  • 11/4 = 2\rightarrow3
  • 2/4 = 0\rightarrow2

Portanto 74510 = 232214

Outro exemplo 4C18 para a base 7:

Como o valor de origem está na base 18 primeiro precisamos convertê-lo para a base 10:

4C18 = 4 * 181 + 12 * 180 = 72 + 12 = 8410

Agora sim aplicamos as divisões:

  • 84/7 = 12\rightarrow0
  • 12/7 = 1\rightarrow5
  • 1/7 = 0\rightarrow1

Assim: 4C18 = 8410 = 1507

Mais um exemplo: converter 6528 para a base 3:

6528 = 6 * 82 + 5 * 81 + 2 * 80 = 384 + 40 + 2 = 42610

  • 426/3 = 142\rightarrow0
  • 142/3 = 47\rightarrow1
  • 47/3 = 15\rightarrow2
  • 15/3 = 5\rightarrow0
  • 5/3 = 1\rightarrow2
  • 1/3 = 0\rightarrow1

Assim: 6528 = 42610 = 1202103

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 0000 0001 0010 0011 0100 0101 0110 0111 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 1110101102 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:

1110101102 = 1.1101.0110

Depois, consultando a tabela convertemos o valor de cada bloco para seu equivalente hexadecimal, assim teremos:

1110101102 = 1.D.616 = 1D616

Convertendo 1110101102 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:

1110101102 = 111.010.110

Depois, consultando convertemos o valor de cada bloco para seu equivalente octal, assim teremos:

1110101102 = 7.2.68 = 7268

Finalmente uma conversão do valor 3A816 para octal:

Primeiro convertemos para os blocos binários equivalentes com 4 dígitos:

3A816 = 3.A.816 = 0011.1010.10002 = 11101010002

Agora reagrupamos em blocos de 3 dígitos:

11101010002 = 1.110.101.0002 = 1.6.5.08

Assim: 3A816 = 16508