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
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:
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:
Assim: 4C18 = 8410 = 1507
Mais um exemplo: converter 6528 para a base 3:
6528 = 6 * 82 + 5 * 81 + 2 * 80 = 384 + 40 + 2 = 42610
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:
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