Analitcs

Pesquisar no conteúdo do blog.atlabs.com.br

quarta-feira, 12 de fevereiro de 2014

AM - Conversão entre sistemas numéricos: Decimal / Binário

Reações: 

Cálculo simplificado de conversão Decimal / Binário:

Fonte Original:
http://pt.wikipedia.org/wiki/Convers%C3%A3o_entre_sistemas_num%C3%A9ricos

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

Conversão de decimal em binário

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

{\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

Conversão de Decimal para Hexadecimal

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

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.
Falhou ao verificar gramática(Função desconhecida: '\begin'): {\begin{aligned}(7\times 16^{2})+(12\times 16^{1})+(1\times 16^{0})\\=(7\times 256)+(12\times 16)+(1)\\=1792+192+1\\=1985\end{aligned}}

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

Octal

Conversão de Decimal para Octal

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

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

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.

Max Gehringer