Convertir un binario a decimal en C
- Convertir binario a decimal en C
- Método 1: Convertir usando variables de bucle y enteras
- Método 2: Utilice un enfoque procedimental
-
Método 3: use la matriz
char
para almacenar el número binario
Este artículo analiza exhaustivamente múltiples implementaciones de C para convertir números binarios en equivalentes decimales. Sin embargo, debemos buscar las bases de conversión inevitables antes de saltar a las implementaciones.
Convertir binario a decimal en C
Los números binarios pueden contener solo dos valores: 0 y 1. Sin embargo, la notación decimal tiene diez símbolos: del 0 al 9 (0,1,2,3,4,5,6,7,8,9).
La notación binaria (0,1) es nativa del hardware de la computadora, mientras que los valores decimales son los valores enteros que los humanos pueden entender fácilmente.
Método de conversión
El número binario 0101
equivale a 5
en decimal. El método de conversión de binario a decimal es bastante sencillo, como se describe en la siguiente fórmula:
Aquí B
es el número binario completo, y B_{i}
representa el bit i^th^
en el número binario dado. La n
representa el número total de bits en el número binario dado.
Apliquemos la fórmula anterior a un número binario 0101
. Haciendo la suma de izquierda a derecha, obtenemos:
El lenguaje binario se usa en el lado del hardware porque hay señales y puertas lógicas en un circuito electrónico; es fácilmente comprensible por el sistema. Cada número binario 0 o 1 se conoce como 1 bit.
Algoritmo para convertir un número binario a un equivalente decimal
Veamos un procedimiento paso a paso para resolver este problema de conversión.
- Inicie el programa.
- Tome un número binario como entrada.
- Si el número es mayor que 0, divide el número por diez y saca el producto del resto con
2*i
, dondei
empieza desde cero. - Continúe dividiendo el cociente como se explicó en el paso 3 e incremente
i
en uno en cada iteración. - Sume todos los productos y devuelva los resultados.
Hay múltiples opciones de implementación para atender el problema. Comencemos discutiendo estos enfoques uno por uno.
Método 1: Convertir usando variables de bucle y enteras
Los bucles for
y while
pueden convertir de binario a decimal.
Usar bucle while
En este enfoque, la operación de división convertirá binario a decimal.
#include <math.h>
#include <stdio.h>
int main() {
int binary_number;
printf("Enter Binary number: ");
scanf("%d", &binary_number);
int decimal = 0, temp = 0, reminder;
while (binary_number != 0) {
reminder = binary_number % 2;
binary_number = binary_number / 10;
decimal = decimal + reminder * (int)pow(2, temp);
temp++;
}
printf("Decimal number is : %d", decimal);
return 0;
}
La primera línea en main()
declara una variable llamada binary_number
para tomar entrada binaria. Después de tomar la entrada de números binarios, estamos declarando además las tres variables:
decimal
: para almacenar el valor decimal resultantetemp
: para servir como contador de iteracionesreminder
: para almacenar el resto en cada iteración
En cada iteración del bucle while
, primero determinamos el bit más a la derecha del binary_number
y lo guardamos en la variable resto
.
Luego, dividimos el binary_number
por diez y sobrescribimos el resultante sobre sí mismo. Esto hace que el binary_number
pierda su bit más a la derecha.
Además, como comentamos al principio del artículo, aplicamos la fórmula para agregar los productos ponderados en la variable decimal
. Al final, imprimimos el equivalente decimal resultante.
Veamos la salida.
Usar bucle for
La estructura básica de ambos bucles (for
y while
) es similar. La ventaja de usar un bucle for
es la declaración e inicialización sencillas de la variable en una sola línea.
Aquí hay otro programa para convertir los números binarios a valores decimales usando el bucle for
.
#include <stdio.h>
int main() {
int binary, decimal = 0, base = 1, remainder, temp;
printf("Enter binary number: ");
scanf("%d", &binary);
for (temp = binary; temp > 0; temp = temp / 10) {
remainder = temp % 2;
decimal = decimal + remainder * base;
base = base * 2;
}
printf("Decimal number is:%d", decimal);
return 0;
}
En la implementación del bucle for
, utilizamos un enfoque ligeramente diferente al del bucle while
.
En lugar de usar una costosa función pow()
, simplemente creamos una variable base
que se multiplicará con un valor de 2
en cada iteración. Esto asegurará que al inicio de la iteración i^th^
, la variable base
tenga un valor equivalente a 2^i^
, donde i
parte de cero.
Producción:
Método 2: Utilice un enfoque procedimental
Este método utilizará un procedimiento o función definida por el usuario para resolver el problema de conversión. Este enfoque es el más deseable si desea que su código sea más reutilizable y modular.
#include <math.h>
#include <stdio.h>
int binarytodecimal(int binary_number) {
int decimal = 0, temp = 0, remainder;
while (binary_number != 0) {
remainder = binary_number % 2;
decimal = decimal + (remainder * pow(2, temp));
binary_number = binary_number / 10;
temp++;
}
return decimal;
}
int main() {
int binary_number, decimal;
printf("Enter binary number: ");
scanf("%d", &binary_number);
decimal = binarytodecimal(binary_number);
printf("Decimal Number is: %d", decimal);
return 0;
}
Todo es igual a nuestro método anterior excepto que adjuntamos todo el código de conversión a un solo procedimiento, binarytodecimal()
.
Método 3: use la matriz char
para almacenar el número binario
En todos los métodos discutidos anteriormente, el problema principal es el tamaño del número entero. Estábamos almacenando números binarios en codificación de enteros.
Entonces, para un compilador de 16 bits
, el número más grande que pudimos proporcionar fue 111111
.
Los compiladores de 32 bits
y 64 bits
con números enteros más grandes seguramente aumentarán el rango de entrada y resolverán el problema. Sin embargo, el tema nos asustará en las versiones anteriores.
Afortunadamente, tenemos un truco para resolver el problema, es decir, usar una matriz dinámica char
para almacenar números binarios en lugar de la variable entera. Veamos el siguiente código para entender la estrategia.
#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
long decimal = 0;
int size;
printf("\nEnter maximum number of digits in your Binary number: ");
scanf("%d", &size);
char* BinaryArr = (char*)malloc(size + 1);
printf("Please Enter your Binary Number: ");
scanf("%s", BinaryArr);
char ch;
for (int i = size - 1, j = 0; i >= 0; i--, j++) {
ch = BinaryArr[i];
decimal += atoi(&ch) * (int)pow(2, j);
}
printf("The equivalent decimal number is: %d", decimal);
return 0;
}
Primero pedimos a los usuarios que confirmen el tamaño del número binario que quieren convertir en un equivalente decimal.
Dado que conocemos el tamaño del número binario, asignamos dinámicamente una matriz de ese tamaño utilizando la función malloc()
. El malloc()
se define en stdlib.h
y asigna memoria dinámica en bytes.
Para convertirlo en una matriz de caracteres, convertimos explícitamente el puntero de retorno de malloc()
en un tipo char*
.
Nota: El
1
extra enmalloc(size +1)
se debe a que queremos espacio para almacenar el carácter\0
al final.
A continuación, tomamos el número binario como entrada en la matriz de caracteres señalada por el puntero de carácter BinaryArr
.
Después de eso, comenzamos a iterar esta matriz de caracteres desde el último índice (es decir, el bit menos significativo del número binario) y tomamos los caracteres binarios uno por uno acercándonos al índice 0
después de cada iteración.
Almacenamos el índice i^th^
en una variable auxiliar ch
en cada iteración. Luego, aplicamos la función atoi()
para obtener un valor entero equivalente.
Luego, ponemos todo en la fórmula discutida al comienzo de este artículo.
Finalmente, tan pronto como termina el bucle, imprimimos el valor decimal final. Veamos cómo se siente en la consola de salida.