En diversos casos necesitamos pasar un número que se encuentra en formato binario a decimal. Dicho de otra manera, convertir un número en base 2 a base 10. ¿Cómo podemos lograr esto en Python?
Una forma sencilla de convertir binario en decimal en Python es multiplicar cada dígito del número binario por 2 elevado a la posición del dígito teniendo en cuenta que las posiciones, de derecha a izquierda, son 0, 1, 2, etc. Finalmente se suma el resultado de todas las multiplicaciones.
Pero antes de seguir leyendo... mejor ve al siguiente artículo si lo que quieres hacer es convertir decimal en binario en Python.
Te cuento a continuación la manera de hacer la conversión y, después, paso a paso, entramos de lleno en la forma de implementarla en Python.
- Cómo convertir de binario a decimal
- Paso 1: Determinar el formato del número binario
- Paso 2: Recorrer los dígitos del número binario
- Paso 3: calcular la posición de cada dígito
- Paso 4: multiplicar cada dígito por 2 elevado a su posición
- Paso 5: sumar el resultado de todas las multiplicaciones
- Paso 6 (opcional): creamos una función
- Infografía de resumen
- Alternativa
Cómo convertir de binario a decimal
Antes de nada, veamos una imagen con el proceso de conversión:
Si te paras a pensarlo, realmente esa es la manera universal de convertir un número binario a decimal. Es decir, matemáticamente se puede resolver así. Esto se puede trasladar a cualquier lenguaje de programación. Pero como este blog va de Python, hagámoslo en Python.
Paso 1: Determinar el formato del número binario
Los números enteros o de tipo int
en Python se representan en decimal (base 10) que es la manera más natural que tenemos los seres humanos de manejar los números.
De esta forma, si una variable tiene el valor 101, su valor se interpreta exactamente como 101 (en decimal) y no como el número binario 101 que en decimal es 5.
Es por esto que lo normal es que si tomamos un número binario de algún sitio su formato sea de tipo string
, es decir, '101'
.
Así que vamos a suponer que cualquier número binario que nos llegue estará en formato string
. Ahora bien, si no fuese así y lo que tenemos es un número de tipo int
que solo tiene ceros y unos y queremos interpretarlo como si fuera un número binario, previamente lo convertiremos a un string
y ya podremos trabajar con él de manera más cómoda.
Para convertir un valor numérico a un string
podemos usar la función str
de la siguiente manera valor_string = str(valor_numerico)
. Veamos un ejemplo:
valor_numerico = 1010110 #un número que queremos interpretar como si fuera binario
valor_string = str(valor_numerico)
print(valor_string)
El resultado por pantalla será el siguiente, donde, como puedes comprobar, el tipo de la variable es un string
como denotan las comillas:
'1010110'
Paso 2: Recorrer los dígitos del número binario
A continuación necesitamos operar con cada uno de los dígitos del número binario. Para ello haremos uso de un bucle que nos permita recorrerlos todos.
Además precisamos convertir cada uno de esos dígitos a un número, ya que son de tipo string
, para poder operar con ellos más adelante. Basta con utilizar la función int
para ello.
Con un bucle for
podemos hacer esto de manera sencilla:
numero_binario = '1010110'
for digito_string in numero_binario:
digito = int(digito_string)
print(digito)
Lo que nos dará el siguiente resultado por pantalla:
Te envío todos los días un consejo para que cada día seas mejor en Python.
Siempre sobre Python y programación.
Más de 2500 personas como tú los reciben cada día.
Día que estás fuera, consejo sobre Python que te pierdes.
Antes de suscribirte consulta aquí la
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y comunicaciones comerciales.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.
1
0
1
0
1
1
0
Paso 3: calcular la posición de cada dígito
Para poder multiplicar cada dígito por 2 elevado a su posición, como te decía al comienzo de este artículo, necesitamos calcular la posición de cada uno de ellos.
Hay que tener en cuenta que la posición del dígito binario de la derecha del todo es la posición menos significativa, y por tanto es la posición 0. El dígito de su izquierda está en la posición 1. A su izquierda, posición 2, y así sucesivamente.
Con esto sabemos que la posición del primero de los dígitos por la izquierda es la longitud del número menos 1. Es decir, si tenemos un número de 7 dígitos, la posición del dígito de la izquierda será 6.
Utilizaremos la función len
para calcular la posición del primer dígito por la izquierda. Así que en cada vuelta del bucle, solo necesitamos ir restando uno de manera sucesiva para tener todas las demás posiciones.
numero_binario = '1010110'
posicion = len(numero_binario) - 1 #posición del primer dígito por la izquierda
for digito_string in numero_binario:
digito = int(digito_string)
print(f'Dígito: {digito}, posición: {posicion}')
posicion -= 1 # restamos 1 a la posición
El resultado será el siguiente:
Dígito: 1, posición: 6
Dígito: 0, posición: 5
Dígito: 1, posición: 4
Dígito: 0, posición: 3
Dígito: 1, posición: 2
Dígito: 1, posición: 1
Dígito: 0, posición: 0
De todas maneras, esto de ir recorriendo el número al revés puede resultar un poco contraintuitivo. Aunque podría hacerse así sin ningún problema, si variamos la manera de recorrer el número en el bucle y lo hacemos de derecha a izquierda, contando las posiciones desde cero tendremos algo un poco más natural.
Una solución elegante podría ser invertir el número para poder recorrerlo cómodamente. Además, podemos utilizar la función enumerate
que nos va devolviendo cada uno de los valores junto con un contador. Precisamente, este valor de contador será la posición del dígito en el número binario original. Te hablo un poco más de la función enumerate
en este artículo sobre cómo recorrer dos listas simultáneamente en Python.
Utilizaremos la notación de porciones para darle la vuelta al número binario de la siguiente manera: numero_binario[::-1]
. El código nos queda de la siguiente manera:
numero_binario = '1010110'
for posicion, digito_string in enumerate(numero_binario[::-1]):
digito = int(digito_string)
print(f'Dígito: {digito}, posición: {posicion}')
El código anterior genera el siguiente resultado, donde puedes ver que ahora los dígitos se recorrer de derecha a izquierda:
Dígito: 0, posición: 0
Dígito: 1, posición: 1
Dígito: 1, posición: 2
Dígito: 0, posición: 3
Dígito: 1, posición: 4
Dígito: 0, posición: 5
Dígito: 1, posición: 6
Paso 4: multiplicar cada dígito por 2 elevado a su posición
Ya tenemos lo más difícil, que es hacer el recorrido conociendo la posición de cada dígito. Ahora nos toca multiplicar cada uno de los dígitos por 2 elevando a su posición. Recuerda que el operador de potencia en Python es **
:
numero_binario = '1010110'
for posicion, digito_string in enumerate(numero_binario[::-1]):
digito = int(digito_string)
multiplicacion = digito * 2 ** posicion;
print(f'Dígito: {digito}, posición: {posicion}, multiplicación: {multiplicacion}')
El resultado que vas a obtener al ejecutar este código es el siguiente:
Dígito: 0, posición: 0, multiplicación: 0
Dígito: 1, posición: 1, multiplicación: 2
Dígito: 1, posición: 2, multiplicación: 4
Dígito: 0, posición: 3, multiplicación: 0
Dígito: 1, posición: 4, multiplicación: 16
Dígito: 0, posición: 5, multiplicación: 0
Dígito: 1, posición: 6, multiplicación: 64
Paso 5: sumar el resultado de todas las multiplicaciones
Si te fijas, solo queda ir sumando el valor de las multiplicaciones en una variable. Cuando hayamos terminado de sumar todo, en esa variable tendremos el número decimal que buscamos.
Voy a aprovechar para simplificar un poco el código que ya tenemos para evitar algunas variables intermedias innecesarias. Verás lo compacta que queda la solución:
numero_binario = '1010110'
numero_decimal = 0 #aquí iremos sumando el resultado de cada multiplicación
for posicion, digito_string in enumerate(numero_binario[::-1]):
numero_decimal += int(digito_string) * 2 ** posicion
print(f'El número decimal que buscamos es {numero_decimal}')
El resultado por pantalla será:
El número decimal que buscamos es 86
Paso 6 (opcional): creamos una función
Si ponemos nuestro código dentro de una función que reciba un número binario por parámetro (formato string
) y devuelva un número decimal podremos usarla cuantas veces queramos y cuando la necesitemos:
def binario_a_decimal(numero_binario):
numero_decimal = 0
for posicion, digito_string in enumerate(numero_binario[::-1]):
numero_decimal += int(digito_string) * 2 ** posicion
return numero_decimal
#ejemplos de uso
print(binario_a_decimal('101'))
print(binario_a_decimal('100011'))
print(binario_a_decimal('101011100011101'))
El resultado de los ejemplos de uso del código de arriba es el siguiente:
5
35
22301
¡Cuidado! En esta solución no hago ningún tipo de comprobación de que los dígitos solo tomen valores 0 o 1. Si le vas a pedir el número binario al usuario, revisa este artículo dónde te explico cómo comprobar la entrada del usuario y asegurarse de que sea válida.
Infografía de resumen
Aquí te dejo una infografía con el resumen de todo este proceso para que te quede perfectamente claro.
Alternativa
Si lo que quieres no es aprender como hacer la conversión tú por tu cuenta y lo que necesitas es una forma cómoda de que Python haga por ti esa conversión, debes usar la función int
.
15 conceptos fundamentales que necesitas conocer para aprender y dominar Python
Te voy a hacer cuatro regalos (no uno, no dos, no tres, cuatro) que hablan de estos 15 conceptos fundamentales de Python: mi Tutorial Básico Interactivo de Python, una cheat sheet de Python en español: La Hoja de Referencia de Python, una guía de ChatGPT y Python y 30 ejercicios de Python (es un reto para ti).
Estos regalos son exclusivos para los suscriptores de Código Pitón.
La función int
permite convertir un número contenido en un string
, en cualquier base, en un número decimal. Solo tenemos que darle como primer parámetro el número a convertir y, como segundo parámetro, la base en la que se encuentra el número.
De esta manera, si queremos convertir, por ejemplo el número 11101
a decimal haremos lo siguiente:
numero = int('11101', 2) #donde el 2 indica la base en la que se encuentra el número a convertir
print(numero)
Y el resultado por pantalla será 29.
Para más información acerca de la conversión contraria, lee el siguiente artículo sobre cómo pasar de decimal a binario en Python.
Te envío todos los días un consejo para que cada día seas mejor en Python.
Siempre sobre Python y programación.
Más de 2500 personas como tú los reciben cada día.
Día que estás fuera, consejo sobre Python que te pierdes.
Antes de suscribirte consulta aquí la
Finalidad de recogida y tratamiento de datos personales: enviarte boletín informativo de Python y comunicaciones comerciales.
Legitimación: tu consentimiento.
Destinatarios: no se ceden a terceros. Los datos se almacenan en los servidores de marketing (GetResponse).
Derechos: podrás ejercer tus derechos de acceso, rectificación, limitación y supresión de datos en info @ codigopiton.com así como presentar una reclamación ante una autoridad de control.
Más información: política de privacidad, encontrarás información adicional sobre la recopilación y el uso de tu información personal.