Created
August 7, 2019 22:35
-
-
Save parzibyte/fae775a8133a25b99d4d78e3b8b09f76 to your computer and use it in GitHub Desktop.
Decimal a binario en C - https://parzibyte.me/blog/2018/09/26/convertir-un-numero-decimal-a-binario-en-c/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <math.h> | |
/* | |
============================ | |
********* NOTA ********* | |
============================ | |
NUMERO_DE_BITS nunca debe ser mayor que 63 | |
excepto si ya hay procesadores de 128 bits ;) | |
*/ | |
#define NUMERO_DE_BITS 8 | |
int main(int argc, char const *argv[]) | |
{ | |
unsigned long long int decimal = 0; // Aquí guardar el número decimal que el usuario ingresa | |
char binario[NUMERO_DE_BITS]; // Una cadena representando el número binario | |
/* | |
Llenar la cadena con ceros | |
*/ | |
for (int i = 0; i < NUMERO_DE_BITS; ++i) binario[i] = '0'; | |
/* | |
Calcular el máximo número que el usuario puede ingresar | |
*/ | |
unsigned long long int maximo = pow(2, NUMERO_DE_BITS); | |
printf("Ingresa el numero decimal [maximo %llu]: \n", maximo - 1); | |
scanf("%llu", &decimal); | |
// Aquí vamos a ir guardando los resultados de la división | |
// Ver: https://parzibyte.me/blog/2018/09/26/funcion-div-en-c-obtener-residuo-cociente/ | |
lldiv_t resultadoDeLaDivision; | |
/* | |
Ahora iniciamos un contador en el número de bits que | |
a su vez corresponde con la longitud de la cadena que guardará | |
el número binario | |
Lo hacemos inversamente (es decir, accedemos primero a la posición N - 1 en donde N es la longitud), | |
y vamos restando en uno hasta llegar al 0. | |
Con ese contador accedemos a la cadena y establecemos un 1 o 0 dependiendo del | |
residuo al dividir el número entre 2 | |
Finalmente vamos asignando a 'decimal' el valor de dividirlo entre 2. | |
Por ejemplo, si es 23 entonces... | |
Primero es 23, sobra 1 y ahora es 11 | |
Luego dividimos 11 entre 2, es 5 y sobra 1 | |
Seguimos dividiendo a 5 entre 2, es 2 y sobra 1 | |
Ahora dividimos a 2 entre 2, es 1 y sobra 0 | |
Finalmente dividimos a 1 entre 2, es 0 y sobra 1 | |
Al llegar al último paso, decimal será 0 y el ciclo terminará | |
*/ | |
int contador = NUMERO_DE_BITS; | |
while(decimal > 0){ | |
resultadoDeLaDivision = lldiv(decimal, 2); | |
contador--; | |
binario[contador] = resultadoDeLaDivision.rem == 1 ? '1' : '0'; | |
decimal = resultadoDeLaDivision.quot; | |
} | |
printf("El numero en binario es: %s\n", binario); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment