Pesquisar na WEB

domingo, 26 de outubro de 2014

Binarios x Decimais

Fonte: http://www.activeinfo.com.br/curso_programacao/conversao_entre_bases.html

Curso de Lógica da Programação na Prática.

Conversão Entre Bases Numéricas.

Na lição anterior tivemos uma introdução aos números decimais, binários, hexadecimais e octais.
Nesta lição vamos aprender algumas técnicas para transformar números de bases diferentes entre si.

Conversão de Decimal para Binário

Para encontrar o número binário correspondente a um número decimal, são realizadas sucessivas divisões do número decimal por 2.
Em seguida, o resto da divisão de cada operação é coletado de forma invertida, da última para a primeira operação de divisão, como na figura, onde foi obtido o número binário correspondente ao número decimal 25:
Conversão de decimal em binário
Na figura acima vemos que o número decimal foi dividido sucessivamente por 2 e os resultados foram coletados da última para a primeira divisão, formando o número binário.

Conversão de Binário para Decimal

Como vimos na lição anterior, para descobrir o número decimal correspondente a um número binário, basta calcular a soma de cada um dos dígitos do número binário multiplicado por 2 (que é a sua base) elevado à posição colunar do número, que, da direita para a esquerda começa em 0.
Vejamos uma conversão do número binário que obtivemos na conversão acima:
Conversão de binário em decimal

Conversão de Decimal para Hexadecimal

A conversão de números decimais para hexadecimais é idêntica à conversão de decimal para binário, exceto que a divisão deve ser realizada por 16, que é a base dos hexadecimais.
Quando tiver dúvida sobre o valor em hexadecimal de algum resto, verifique na tabela da lição anterior.
Conversão de decimal em hexadecimal

Conversão de Hexadecimal em Decimal

A conversão de números hexadecimais em decimais é realizada através da soma dos dígitos hexadecimais multiplicados pela base 16 elevada à posição colunar contando da direita para a esquerda, começando em 0, de forma semelhante à conversão de binários em decimais:
Conversão de hexadecimal em decimal
Note que os caracteres que definem os dígitos hexadecimais AB e C foram substituídos pelos valores equivalentes em decimais 1011 e 12 de acordo com a tabela da lição anterior para a realização do cálculo.

Conversão de Decimal em Octal

Assim como nas conversões anteriores, divide-se o decimal pela base para a qual se quer obter o número, no caso, 8:
Conversão de decimal em octal
Vimos que foram coletados os restos de cada divisão da última para a primeira para formar o número octal.

Conversão de Octal em Decimal

A conversão de números octais em decimais é obtida através da soma dos dígitos do número octal multiplicados pela base 8 elevada à posição colunar do dígito, começando em 0 da direita para a esquerda:
Conversão de octal em decimal

Conversão de Binário em Hexadecimal

Para converter um número binário em hexadecimal, separa-se o número binário em grupos de 4 bits, da direita para a esquerda. Em seguida, transforma-se cada grupo de 4 bits em hexadecimal. Ao final, simplesmente une-se os resultados em um só:
Conversão de binário em hexadecimal
Caso o número de dígitos do número binário não seja múltiplo de 4, completa-se os dígitos à esquerda com zeros (0):
Conversão de binário em hexadecimal

Conversão de Binário em Octal

Para converter números binários em octais, separa-se os dígitos do número binário em grupos de 3 bits da direita para a esquerda. Em seguida transforma-se cada grupo individual de 3 bits em octal. Ao final, une-se os resultados:
Conversão de binário em octal
Caso o número de dígitos do número binário não seja múltiplo de 3, completa-se os dígitos à esquerda com zeros (0):
Conversão de binário em octal

Conversão de Hexadecimal em Binário

Para converter números hexadecimais em binários, decompõem-se o número hexadecimal diretamente em binários de 4 dígitos. Os zeros mais à esquerda do resultado binário podem ser omitidos:
Conversão de hexadecimal em binário

Conversão de Octal em Binário

Para converter números octais em binários, decompõem-se o número octal diretamente em binários de 3 dígitos. Os zeros mais à esquerda do resultado binário podem ser omitidos:
Conversão de octal em binário

Conversão de Octal em Hexadecimal

Para converter um número octal em hexadecimal, transforma-se primeiro o octal em binário e em seguida o binário em hexadecimal:
Conversão de octal em hexadecimal

Conversão de Hexadecimal em Octal

Para converter um número hexadecimal em octal, transforma-se primeiro o hexadecimal em binário e em seguida o binário em octal:
Conversão de hexadecimal em octal

Conversões entre Bases em Ruby

Na lição anterior vimos que temos, basicamente:
  • Números Decimais, de base 10.
  • Números Binários, de base 2.
  • Números Hexadecimais, de base 16.
  • Números Octais, de base 8.
Em Ruby há uma maneira bem simples de converter números entre bases diferentes.
Veja este exemplo no irb:
Conversão entre bases no irb
Vejamos como é feita essa conversão:
  • Em primeiro lugar, o número em questão está no formato String (observe as aspas). Em seguida, o mesmo é convertido em inteiro com o .to_i, informando a base entre parênteses para a qual o mesmo deve ser convertido, no caso, base 10, para que seja convertido em inteiro decimal.Conversão entre bases no irbEm seguida o número é convertido em String novamente, informando a base para a qual o número deve ser interpretado, no caso, base 2, para que seja convertido em binário.
  • Na segunda operação, o processo inverso é realizado. O número binário que está no formato String é convertido em inteiro com o .to_i e é informada a base 2 para o mesmo, que logo em seguida é convertido novamente emString, dessa vez de base 10.Conversão entre bases no irb
E, é claro que Ruby também facilita a conversão entre outras bases. Nas linhas subsequentes do nosso teste são convetidos diversos exemplos que utilizamos em nossa lição entre diversas bases.

Conversão entre bases em Java

Em Java, também é fácil converter números entre bases diferentes. Veja este programa simples:
/**********************************************************
 * Programa: programa em Java que demonstra a
 *           conversão de números entre bases diferentes
 *
 * Compilação: javac ConversaoEntreBases.java
 * Execução: java ConversaoEntreBases
 *
 * % java ConversaoEntreBases
 * % ---------------------------------
 * % Decimal 211 para Binário: 11010011
 * % Decimal 211 para Octal: 323
 * % Decimal 211 para Hexadecimal: d3
 * % ---------------------------------
 * % Binário: 11101110 para Decimal: 238
 * % Binário: 11101110 para Octal: 356
 * % Binário: 11101110 para Hexadecimal: ee
 * % ---------------------------------
 * % Octal: 77 para Decimal: 63
 * % Octal: 77 para Binário: 111111
 * % Octal: 77 para Hexadecimal: 3f
 * % ---------------------------------
 * % Hexadecimal: 58 para Decimal: 88
 * % Hexadecimal: 58 para Binário: 1011000
 * % Hexadecimal: 58 para Octal: 130
 *
 * @author Marcos Cesar Kossoski
 *
**********************************************************/
public class ConversaoEntreBases {

  public static void main (String[] args) {

    String dec = "211";
    // string para inteiro decimal
    int decimal = Integer.parseInt(dec, 10);
    // decimal para binario
    String binario = Integer.toBinaryString(decimal);
    // decimal para octal
    String octal = Integer.toOctalString(decimal);
    // decimal para hexadecimal
    String hexadecimal = Integer.toHexString(decimal);

    System.out.println("---------------------------------");
    System.out.println("Decimal " + dec + " para Binário: " + binario);
    System.out.println("Decimal " + dec + " para Octal: " + octal);
    System.out.println("Decimal " + dec + " para Hexadecimal: " + hexadecimal);

    // -------------------------------------------------------

    String bin = "11101110";
    // string binario para decimal
    int decBin = Integer.parseInt(bin, 2);
    // binario para octal
    String decOct = Integer.toOctalString(decBin);
    // binario para hexadecimal
    String decHex = Integer.toHexString(decBin);

    System.out.println("---------------------------------");
    System.out.println("Binário: " + bin + " para Decimal: " + decBin);
    System.out.println("Binário: " + bin + " para Octal: " + decOct);
    System.out.println("Binário: " + bin + " para Hexadecimal: " + decHex);

    // -------------------------------------------------------

    String oct = "77";
    // string octal para inteiro decimal
    int octalInt = Integer.parseInt(oct, 8);
    // octal para hexadecimal
    String octHex = Integer.toHexString(octalInt);
    // octal para binário
    String octBin = Integer.toBinaryString(octalInt);

    System.out.println("---------------------------------");
    System.out.println("Octal: " + oct + " para Decimal: " + octalInt);
    System.out.println("Octal: " + oct + " para Binário: " + octBin);
    System.out.println("Octal: " + oct + " para Hexadecimal: " + octHex);

    // -------------------------------------------------------

    String hex = "58";
    // string hexadecimal para inteiro decimal
    int hexInt = Integer.parseInt(hex, 16);
    // hexadecimal para octal
    String hexOct = Integer.toOctalString(hexInt);
    // hexadecimal para binario
    String hexBin = Integer.toBinaryString(hexInt);

    System.out.println("---------------------------------");
    System.out.println("Hexadecimal: " + hex + " para Decimal: " + hexInt);
    System.out.println("Hexadecimal: " + hex + " para Binário: " + hexBin);
    System.out.println("Hexadecimal: " + hex + " para Octal: " + hexOct);
  }

}
Testando o programa:
Conversão entre bases em Java

Nenhum comentário:

Postar um comentário