Executando verificação de segurança...
2

Como converter números binários para decimais

Converter números binários para decimais é mais simples do que parece.

Digamos que tenhamos o número 1001101.

Primeiro, precisamos saber o número de caracteres existente. Nesse caso, 7.

O primeiro elemento tem peso 7 - 1, o segundo elemento 7 - 2 e assim até o último elemento, que tem peso 0.

Para ficar mais visual, eis o exemplo:

1 0 0 1 1 0 1 (Elementos)
6 5 4 3 2 1 0 (Pesos)

Para fazer o cálculo do binário, usaremos só os uns (1).

Se o elemento for 1, nós guardamos o valor de 2 elevado ao peso do número.

No caso do exemplo, os uns e seus pesos são:

  • (1, 6)
  • (1, 3)
  • (1, 2)
  • (1, 0)

Portanto, o binário seria: 2⁶ + 2³ + 2² + 2⁰, que é igual a 77.

Segue abaixo a representação em forma de algoritmo:

def binary_to_decimal(binary: str):
    binary = list(binary)
    value = 0
    
    for i in range(len(binary)):
        last = binary.pop()
        if last == "1":
            value += pow(2, i)
            
    return value
Carregando publicação patrocinada...
2

Atenção, não é uma crítica, apenas um complemento.

Entendo que o objetivo - presumo - é ser didático e mostrar os detalhes do algoritmo e como implementá-lo. De fato, acho importante saber como as coisas funcionam e implementar algo do zero sempre ajuda a aprender.

Mas só pra constar, se for para um uso mais prático: como o código apresentado está em Python, vale lembrar que a linguagem já tem isso pronto. Basta usar int:

print(int('10110101100', 2)) # 1452

O segundo argumento indica que quero usar a base 2 para fazer a conversão.


Por fim, como sugestão, segue outra maneira de implementar o mesmo algoritmo:

def binary_to_decimal(binary: str):
    value = 0  
    for i, c in enumerate(reversed(binary)):
        if c == "1":
            value += pow(2, i)         
    return value

No caso, enumerate itera pelos caracteres da string ao mesmo tempo em que já me fornece os índices. E reversed percorre ela de trás pra frente.

O mesmo algoritmo pode também ser feito com uma generator expression:

def binary_to_decimal(binary: str):      
    return sum(pow(2, i) for i, c in enumerate(reversed(binary)) if c == "1")

Ou, sem usar reversed e fazendo um ajuste no expoente:

def binary_to_decimal(binary: str):      
    return sum(pow(2, len(binary) - 1 - i) for i, c in enumerate(binary) if c == "1")
1

É uma situação parecida com ordenar uma lista. Eu posso usar o sort() da linguaguem, mas saber como fazer um bubble sort, quick sort, merge sort etc.. mostra mais habilidade com a lógica

1
1