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")