image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Fernando Araujo
Fernando Araujo18/01/2024 20:24
Compartilhe

<Direto ao Ponto 05> Conversão entre bases de numeração

    <Direto ao Ponto 05> Conversão entre bases de numeração

     

    Artigos da série: ( < ) Anterior | Índice | Seguinte ( > )

     

    Olá, dev!

     

    Este é mais um artigo da NOVA série DIRETO AO PONTO, que eu estou escrevendo para a DIO.

     

    Ele vai apresentar como se dá a conversão entre números de bases diferentes, enfocando as bases decimal, binária, hexadecimal e octal, vistos nos artigos anteriores

     

    Sumário

    1.   Introdução

    2.   Conversão de bases

    3.   Programas para conversão de bases

    4.   Considerações finais

    5.   Referências

     

    1 – Introdução

     A NOVA série DIRETO AO PONTO enfoca artigos básicos sobre a programação e é voltada, principalmente, para os iniciantes.

     

    Serão publicados artigos técnicos e artigos contando alguma história relacionada à computação/programação. Será publicado um artigo por semana, sempre no início da semana, pela manhã.

     

    A programação trabalha com vários sistemas de numeração e geralmente, é necessário realizar a conversão entre números destas bases.

     

    Neste artigo, eu vou apresentar técnicas de conversão entre números das bases decimal, binária octal e hexadecimal, indo e voltando. Estas são as bases numéricas mais usadas em programação e e informática.

      

    Além disso, para evitar os cálculos sem fim usados na conversão de bases numéricas, eu vou apresentar dois programas, escritos em Python, um para converter um número decimal para qualquer base e outro para converter de qualquer base para o sistema decimal.

     

    Mais uma vez, quero deixar claro que boa parte do conteúdo escrito aqui vem da minha própria vivência pessoal ao longo dos anos em que convivi com a tecnologia e informática, desde 1980. Nestes casos, não haverá referências de livros, revistas ou sites, apenas as minhas lembranças pessoais.

     

    2 – Conversão de bases

    Nós trabalhamos no dia-a-dia com o sistema decimal, mas em programação, é bem comum a gente precisar converter de uma base para outra.

     

    Para converter de qualquer base para decimal, basta realizar as contas de acordo com os valores numéricos dos símbolos usados nas representações de outras bases e multiplicar o valor pela posição relativa de cada símbolo no número.

     

    Por exemplo, para converter um número binário para a base decimal:

     

    Binário 01101011 =

     

    0 x 27 + 1 x 26 + 1 x 25 + 0 x 24 + 1 x 23 + 0 x 22 + 1 x 21 + 1 x 20 =

    0 x128 + 1 x 64 + 1 x 32 + 0 x 16 + 1 x 8 + 0 x 4 + 1 x 2 + 1 x 1 = 

    0 + 64 + 32 + 0 + 8 + 0 + 2 + 1 = 107 unidades

     

     

    Para converter um número octal para a base decimal:

     

    Octal 775 =

     

    7 x 82 + 7 x 81 + 5 x 80 =

    7 x 64 + 7 x 8 + 5 x 1 = 

    448 + 56 + 5 = 509 unidades

     

    Esta conversão de octal para decimal raramente é necessária na programação, sendo muito mais usada sua conversão para binário, vista mais adiante. Mesmo assim, a conversão para decimal é feita como no exemplo anterior.

     

    Para converter um número hexadecimal para a base decimal:

     

    Hexadecimal 9F =

     9 x 161 + 15 x 160 =

    9 x 16 + 15 x 1 = 

    144 + 15 = 161 unidades

     

    Conversão de um número octal para binário:

     

    Octal 775 = Binário 111 111 101 -> rxw rxw r-w (para dono, grupo, outros)

     

    Neste caso, não estamos buscando o resultado numérico, mas apenas a identificação de cada um dos bits do número octal, que dará a representação das permissões de acesso habilitadas para o dono, grupo e para os outros.

     

    Conversão de um número hexadecimal para binário:

     

    A conversão do sistema hexadecimal para o binário é feita decompondo-se cada símbolo hexadecimal no binário equivalente:

     

    Hexadecimal 3C = Hexadecimal 3 C = Binário 0011 1010 = Binário 00111010

     Conversão de um número binário para a base hexadecimal:

     

    Esta conversão é realizada agrupando-se os dígitos binários de 4 em 4, da direita para a esquerda e representando pelo hexadecimal equivalente a cada 4 dígitos:

     

    Binário 10101110 = Binário 1010 1110 = Hexadecimal AE  

     

    Para fazer a conversão de um número decimal para qualquer base basta dividir o número pelo valor da base, terminando quando o quociente da divisão for menor que o valor da base. Para finalizar, junta o último quociente obtido e os todos restos das divisões, do último para o primeiro. Veja os exemplos a seguir:

     

    Conversão de um número decimal para hexadecimal:

     

    Decimal 463 para hexadecimal:

     

    463 / 16 = 28 (resto 15)

    28 / 16 = 1 (resto 12) – O quociente (1) é menor que a base (16), para aqui!

     

               Juntando o último quociente (1) e todos os restos (12 e 15), do último para o primeiro, temos as quantidades abaixo. Convertendo cada valor para o símbolo hexadecimal equivalente, temos:

     

    1(12)(15) = 1CF

     

    Para converter esse mesmo número decimal (463) para binário, basta converter cada símbolo hexadecimal do resultado para o binário equivalente:

     

    Hexadecimal 1CF = Hexadecimal (1)(C)(F) – Binário (0001)(1100)(1111) = Binário 000111001111

     

    Finalmente, para converter de um decimal para o binário equivalente, basta fazer as divisões por 2, ao invés de 16:

      

    Conversão de um número decimal para binário:

     

    Decimal 2588 para binário:

     

    2588 / 2 = 1294 (resto 0)

    1294 / 2 = 647 (resto 0)

    647 / 2 = 323 (resto 1)

    323 / 2 = 161 (resto 1)

    161 / 2 = 80 (resto 1)

    80 / 2 = 40 (resto 0)

    40 / 2 = 20 (resto 0)

    20/ 2 = 10 (resto 0)

    10 / 2 = 5 (resto 0)

    5 / 2 = 2 (resto 1)

    2 / 2 = 1 (resto 0) – O resto (1) é menor que a base (2), para aqui!

     

     Juntando o último quociente (1) e os restos (0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0), do último para o primeiro, temos:

     

    Binário 101000001100

     

     Para converter esse número decimal (2588) para binário, basta separar os dígitos binários de 4 em 4, da direita para a esquerda. Depois, é só converter cada 4 dígitos binários no símbolo hexadecimal equivalente:

     

    Se o grupo mais à esquerda não tiver 4 bits, deve-se acrescentar zeros à esquerda deste grupo até completar os 4 bits, necessários para converter diretamente de binário para um símbolo hexadecimal.

     

    Binário 101000011100 = Binário 1010 0001 1100 = Hexadecimal A1C

     

    Dificil? Nem tanto, com a prática vai ficar bem mais fácil!!!

     

     

    3 – Programas para conversão de base

    Mas...

     

    Como eu costumo mostrar tudo nos meus artigos, não iria deixar você com essa dúvida nem com o trabalho de fazer estas conversões no lápis.

     

    Seguem alguns programas em Python para realizar as conversões mais comuns, adaptado, após uma pequena ajuda do ChatGPT.

    (“with a little help from my friends!”) :-)

     

    Programa de conversão da base 10 para qualquer base

     

    def decimal_para_base(numero, base):
     if not (isinstance(numero, int) and isinstance(base, int)):
         return "Por favor, o número e a base devem ser inteiros."
     
     if numero < 0 or base < 2:
         return "O número não pode ser negativo e a base deve ser 2 ou maior."
     
     if numero == 0:
         return f"O número {numero} na base {base} é: 0"
     
     resultado = ""
     while numero > 0:
         resto = numero % base
         if resto < 10:
             resultado = str(resto) + resultado
         else:
             resultado = chr(ord('A') + resto - 10) + resultado
         numero = numero // base
     
     return f"O número na base {base} é: {resultado}"
     
    # Exemplo de uso:
    numero_decimal = int(input("Digite um número decimal: "))
    base_alvo = int(input("Digite a base para a conversão: "))
     
    resultado = decimal_para_base(numero_decimal, base_alvo)
    print(resultado)
    

     

    Programa de conversão de qualquer base para a base 10

     

    def qualquer_base_para_decimal(numero, base):
     try:
         decimal = int(numero, base)
         return f"O número decimal correspondente é: {decimal}"
     except ValueError:
         return "Por favor, insira um número válido na base especificada."
     
    # Exemplo de uso:
    base_input = int(input("Digite a base do número: "))
    numero_input = input("Digite um número válido na base desejada: ")
     
    resultado_decimal = qualquer_base_para_decimal(numero_input, base_input)
    print(resultado_decimal)
    

     

               OBS: Os dois programas foram testados no Google Colab e estão funcionando sem problema.

     

     

    3 – Considerações finais

    Este é mais um artigo da NOVA série DIRETO AO PONTO, que eu estou escrevendo para a DIO.

     

    A programação trabalha com vários sistemas de numeração e geralmente, é necessário realizar a conversão entre números destas bases. Neste artigo, foram apresentadas técnicas de conversão entre números das bases decimal, binária octal e hexadecimal, indo e voltando.

     

    Por fim, foram disponibilizados dois programas, escritos em Python, para realizar a conversão de bases, um de decimal para qualquer base e outro para converter de qualquer base para o sistema decimal.

     

    O assunto é vasto, mas esta é apenas uma introdução sobre as bases binária e a hexadecimal.

     

    Agora, você está aprendendo a escovar bits, como a gente costuma dizer!

     

     

    4 – Referências

               Sem referências, tá tudo na minha cabeça (“in my head”).

     

    “In your head, in your head

    Zombie, zombie, zombie-ie-ie

    What's in your head, in your head?

    Zombie, zombie, zombie-ie-ie-ie, oh”

    (Zombie – música do Cranberries) :-)

     

    Mas, se você quiser uma bibliografia para se aprofundar no assunto, eu fiz uma pesquisa e, para o assunto deste artigo, gostei dessas:

     

    [1] FERNANDES, Sthefania, Binário x decimal x Hexadecimal: Conheça os sistemas de numeração. Disponível em: <https://embarcados.com.br/binario-decimal-hexadecimal-sistemas-de-numeracao/>. Acessado em: 17/01/2024

     

     

     Artigos da série: ( < ) Anterior | Índice | Seguinte ( > )

     

    Compartilhe
    Comentários (2)
    Fernando Araujo
    Fernando Araujo - 19/01/2024 12:48

    Opa, André! Audiência VIP!! Obrigado! Também estou seguindo seus artigos!!! TOP!!!

    André Bezerra
    André Bezerra - 19/01/2024 10:13

    Continuo acompanhando!