Conversão entre sistemas numéricos

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Sistemas de numeração por cultura
Numerais hindu-arábico
Árabe ocidental
Árabe oriental
Família indiana
Khmer
Mongólico
Thai
Numerais leste-asiáticos
Chinês
Counting rods
Japonês
Coreano
Suzhou
Numerais alfabéticos
Abjad
Armênio
Āryabhaṭa
Cirílica
Ge'ez
Grego (jônio)
Hebraico
Outros sistemas
Ático
Babilônica
Brahmi
Egípcios
Etrusco
Inuíte
Maia
Romano
Urnfield
Lista de sistemas de numeração
Sistema de numeração posicional
5, 10, 15, 20
2, 4, 8, 16, 32, 64
3, 6, 9, 12, 24, 30, 36, 60
1, 7, 13, 26

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.
  1. 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]


\begin{array}{ccccccccccccccccccccc}
1 && 1 && 1 && 1 && 1 && 0 && 0 && 0 && 0 && 0 && 1 \\
 \\
2^{10} \times 1 &&
2^9 \times 1 &&
2^8 \times 1 &&
2^7 \times 1 &&
2^6 \times 1 &&
2^5 \times 0 &&
2^4 \times 0 &&
2^3 \times 0 &&
2^2 \times 0 &&
2^1 \times 0 &&
2^0 \times 1 \\
 \\
1024 &+& 512 &+& 256 &+& 128 &+& 64 &+& 0 &+& 0 &+& 0 &+& 0 &+& 0 &+& 1 \\
&&&&&&&&&&= \\
&&&&&&&&&&1985
\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 = 10101010;
parseInt( x, 2 ); //170

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 restos 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]