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