Cuando escribí la entrada anterior sobre cómo convertir decimal a binario en C olvidé escribir un nuevo post sobre hacer el proceso inverso, es decir, convertir binario a decimal en C.

Veamos cómo podemos convertir una cadena que representa a un número binario en su forma decimal. Por ejemplo, convertir “101011111011” en 2811.

Algoritmo para convertir binario a decimal en el lenguaje C

Para esto vamos a aplicar un poco de matemáticas y de trabajo con cadenas. Lo que haremos será recorrer la cadena binaria de derecha a izquierda.

Por cada posición (de derecha a izquierda, repito) hay un número por el que multiplicaremos. Primero es 1, luego 2, 4, 8 y así; doblando el valor en cada iteración. Realmente esto tiene una explicación más larga, cosa que explicamos en otro post.

Pero podemos simplificar más esto, ya que únicamente hay unos y ceros. Si es un uno, entonces sumamos el multiplicador, y si no, no hacemos nada (porque al multiplicar por 1 se obtiene el mismo número, y al multiplicar por 0 se obtiene 0).

En un ejemplo tenemos a 110. Recorremos de derecha a izquierda, tenemos al 0 y el multiplicador es 1. No hacemos nada.

Luego tenemos al 1, el multiplicador es 2 y por lo tanto sumamos 2. Finalmente tenemos a otro 1, el multiplicador es 4 y lo sumamos.

El resultado final será 5 en decimal. Así de simple.

Función que convierte binario a decimal en C

Pero basta de charlas; veamos a la función:

Como ves recibe la cadena y la longitud de la misma; porque necesitamos recorrerla al revés. Leemos cada carácter y vemos si es 1, en caso de que sí, acumulamos en decimal lo que haya en multiplicador.

Independientemente del carácter, siempre aumentamos el multiplicador; o mejor dicho doblamos su valor.

Ah, por cierto, regresa un unsigned long long porque me parece que es el número más grande que se puede usar en C, ya que no sabemos cuál cadena binaria nos pasen y mejor prevenimos para regresar el mayor posible.

Recomiendo: invertir cadena en C.

Probar programa

Puedes probarlo así:

La función y la forma de leer la variable están separadas. Digo esto para que no te confundas, ya que al leer la variable usamos fgets y quitamos el salto de línea para prevenir un desbordamiento de búfer. De ahí calculamos la longitud con strlen que viene en string.h.

Convierte binario a decimal en vivo justo aquí:

En mi caso probé con el número 11111111111111111111111 y salió esto:

Probar conversión binaria a decimal en C

Probar conversión binaria a decimal en C

Más tarde lo comprobé con mi conversor de números online y los resultados fueron iguales; es decir, correctos.

Estoy interesado en trabajar contigo de manera remota para llevar tu idea a la realidad, formar parte de tu equipo de desarrolladores, ayudarte con tu tarea, dar asesorías y todo lo relacionado con tecnología y programación. Contáctame para más información
No te vayas sin seguirme en Twitter, Facebook y GitHub
Si tienes dudas déjalas en un comentario, pero asegúrate de seguirme antes como agradecimiento (no te cuesta nada y me ayudas mucho)


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

2 Comments

Leer datos por teclado en C utilizando scanf - Parzibyte's blog · noviembre 19, 2018 a las 9:59 am

[…] %llu para enteros que son unsigned long long (usamos esto cuando vimos cómo convertir binario a decimal) […]

Hexadecimal a decimal en C - Parzibyte's blog · noviembre 19, 2018 a las 10:52 pm

[…] Binario a decimal […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: