Conversão entre sistemas numéricos

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

A conversão entre sistemas numéricos é feita com base em algumas regras e serve para que se obtenha o valor de um elemento no sistema numérico mais adequado a cada situação. Entre os sistemas numéricos mais utilizados na computação há o binário, decimal, octal e sistema hexadecimal. Cada um destes apresentando sua própria faixa de valores possíveis, e cada um possui uma aplicação específica, dentro da Ciência da Computação.

Sistema binário[editar | editar código-fonte]

Conversão de decimal em binário[editar | editar código-fonte]

Para realizar a conversão utiliza-se o método de divisão repetida.

Para converter, por exemplo, o número decimal 1985 em binário deve-se fazer o seguinte:

  1. Dividir o número decimal por 2. Caso o resultado seja exato, aquela divisão terá resto 0 (zero), se não for exato terá resto 1 (um). Esse valor deve ser anotado da direita para a esquerda ou como explicado abaixo do exemplo.
  2. Deve-se dividir o número até que o quociente da divisão seja igual a 0 (zero).
Divisão Quociente Resto
1985/2 992 1
992/2 496 0
496/2 248 0
248/2 124 0
124/2 62 0
62/2 31 0
31/2 15 1
15/2 7 1
7/2 3 1
3/2 1 1
1/2 0 1
  1. Observe que o resultado é obtido juntando o resultado da última para a primeira divisão, ou seja, de baixo para cima, onde o resultado é o seguinte número binário: 11111000001.

Outra forma desta conversão (mais prática) é ir subtraindo o número em decimal das potências de base 2 até dar 0. Subtraia da maior potência de base 2 possível. Deve se marcar 1 quando você efetua a subtração, e 0 no restante (os zeros à esquerda devem ser desprezados).

Por exemplo:

      128 64 32 16 8 4 2 1
22 -->  0  0  0  1 0 1 1 0 
Logo 22 em decimal = 10110 em binário

O maior número de base 2 possível pra ser subtraído de 22 é 16, sobrando 6. O maior número possível para subtrair de 6 é 4, sobrando 2. O maior número a ser subtraído de 2 é o próprio 2, resultando 0 e assim finalizando a conversão.

Outro exemplo:

      128 64 32 16 8 4 2 1
35 -->  0  0  1  0 0 0 1 1 
logo 35 em decimal = 100011 em binário

pois: 35 - 32 = 3
3 - 2  = 1
1 - 1  = 0

Se o número em decimal é menor que zero, toma-se o valor absoluto, ex. "-5" --> "5", iniciamos o quociente com um quociente > 1, enquanto o quociente for maior que 1 faz-se consecutivamente a divisão do valor absoluto por 2 e iguala-se imediatamente a seguir o valor absoluto ao valor do quociente. Se o número de vezes em que foi possível dividir por 2 e obter um quociente > 1 for inferior a um valor múltiplo de 8 então acrescenta-se a esse número vezes o valor que for necessário para chegar ao próximo múltiplo de 8. A seguir pega-se no número de vezes e cria-se uma variável que será igual a [2^(Número de vezes)]+[número decimal negativo inicial] A seguir pega-se no valor desta variável e converte-sa para binário como visto em cima.

Se o número em decimal tiver casas decimais, ex (1.34) acrescentamos à expressão em binário um "." e considera-se um número de vezes em que se pretenda converter para binário a parte de casas decimais ex: enquanto não chegar a 50 vezes fazemos a parte com casas decimais ser multiplicada por 2, a seguir agarramos na parte à esquerda da virgula do resultado desta multiplicação e adicionamo-la à conversão em binário à direita do ".".

Em JavaScript poderia ser feito assim:

function decParaBin( numDecimal ) {
        for ( binário = []; numDecimal > 1; ) {
                resto = Math.floor( numDecimal % 2 );
                numDecimal /= 2;
                binário.unshift( resto == 1 ? 1 : 0 );
        }

        if ( !/[^0]/.test( binário.join('') ) ) binário.unshift( 1 );

        return binário.join('');
}

//Ou
x = 170;
x.toString( 2 ); //10101010

Conversão de Binário para Decimal[editar | editar código-fonte]

Falhou ao verificar gramática (Falha na conversão para PNG; verifique se o latex, dvips, gs e convert foram correctamente instalados): \begin{array}{ccccccccccccccccccccc} 1 && 0 && 0 && 0 && 0 && 0 && 0 && 0 && 0 2^9 \times 1 && 2^8 \times 0 && 2^7 \times 0 && 2^6 \times 0 && 2^5 \times 0 && 2^4 \times 0 && 2^3 \times 0 && 2^2 \times 0 && 2^1 \times 0 && \\ 1024 &+& 512 &+& 256 &+& 128 &+& 64 &+& 0 &+& 0 &+& 0 &+& 0 &+& 0 &+& 1 \\ &&&&&&&&&&= \\ &&&&&&&&&&256 \end{array}


Da direita para a esquerda elevamos 2 à potência do índice e multiplicamos pelo dígito binário identificado por esse índice. Desta forma o primeiro dígito binário que encontramos é o 1 no índice 0 , assim temos: 2^0 \times 1. Após realizarmos essa operação para todos os zeros para todos os dígitos, somamos o resultado. O resultado desta soma é o número que estamos buscando.

Em JavaScript:

function binParaDec( numBinário ) {
        var base2 = [],
            decimal = 0,
            binário = numBinário.toString();

        for ( i = binário.length, j = 1; --i > -1; j *= 2 ) base2.unshift( j );

        for ( i in binário ) {
                if ( binário[i] == 0 ) delete base2[i];
                else decimal += base2[i];
        }

        return decimal;
}

//Ou simplesmente
x = 100000000;
parseInt( x, 2 ); /256

Hexadecimal[editar | editar código-fonte]

Conversão de Decimal para Hexadecimal[editar | editar código-fonte]

Para converter de decimal para hexadecimal, procede-se do mesmo modo que na conversão decimal-binário. Basta agora dividir por 16 e não mais por 2.


 \begin{array}{ccc}
 1985 &\vline\underline{\; 16\; \;} \\
 (1) & \; 124 &\vline\underline{\; 16\; \;} \\ 
 & (12) & 7
 \end{array}
 

7 (12 é a letra C) 1 = 7C1

Resultado: 7C1

Para obter o resultado juntamos o resultado da última divisão com o resto das divisões anteriores na sequência, aqui temos que transformar qualquer número maior que 9 em suas respectivas representações alfabéticas. Como em nosso exemplo temos os respectivos resultados, 7, 12 e 1, temos que transformar 12 em C, seu correspondente alfabético. Assim 1985 decimal é igual a 7C1 em hexadecimal.

Conversão de Hexadecimal para Decimal[editar | editar código-fonte]

Para realizar a conversão realizamos os seguintes passos:

  • Primeiro transformamos cada dígito alfabético em número. assim o C será convertido para 12 e os números ficarão 7, 12 e 1.
  • Agora multiplicamos cada número por 16m, onde m é casa decimal onde ele se encontra, sendo que o dígito mais a direita é 0.

 \begin{align}
 (7 \times 16^2) + (12 \times 16^1) + (1 \times 16^0) \\
 = (7 \times 256) + (12 \times 16) + (1) \\
 = 1792 + 192 + 1 \\
 = 1985
 \end{align}
   

Obtemos assim o resultado esperado. O número 7C1 convertido para 1985.

Octal[editar | editar código-fonte]

Conversão de Decimal para Octal[editar | editar código-fonte]

Utiliza-se divisão sucessiva para encontrar o valor octal a partir o número decimal. Dividimos sucessivamente o número 1985 até encontrarmos resultados que sejam menores ou iguais a sete.

       1985 | 8
         385   248 | 8
          65    08   31 | 8
           1     0    7   3

Conversão de Octal para Decimal[editar | editar código-fonte]

Resultado da divisão 3701. Obtemos esse número juntando o resultado da última divisão e o resto das divisões anteriores.

        3         7        0        1
      3 X 8³    7 X 8²   0 X 8¹   1 X 8°
               +        +        +                          
       1536       448       0        1             
                    =
                   1985

Ver também[editar | editar código-fonte]