Conversión entre sistemas numéricos

CBeginner
Practicar Ahora

Introducción

Los sistemas numéricos son maneras de representar números utilizando diferentes símbolos y operaciones matemáticas. La conversión entre diferentes sistemas numéricos es una tarea común en la programación. En este laboratorio, mostraremos programas que pueden convertir números de un sistema a otro. Cubriremos:

  • Conversión de binario a decimal
  • Conversión de octal a decimal
  • Conversión de decimal a binario (sin recursión)
  • Conversión de decimal a binario (con recursión)

Nota: Debes crear el archivo ~/project/main.c tú mismo para practicar la codificación y aprender cómo compilar y ejecutarlo utilizando gcc.

cd ~/project
## crear main.c
touch main.c
## compilar main.c
gcc main.c -o main
## ejecutar main
./main

Conversión de binario a decimal

El binario es un sistema numérico que utiliza solo dos dígitos, 0 y 1. El decimal es un sistema numérico que utiliza diez dígitos, del 0 al 9. Aquí está el programa en C que convierte un número binario en su equivalente decimal:

#include<stdio.h>
#include<math.h>

// Declaración del prototipo de la función
int binary_decimal(int n);

int main()
{
    printf("\n\n\t\tLabEx - Mejor lugar para aprender\n\n\n");
    int n;
    char c;
    printf("Ingrese el número binario: ");
    scanf("%d", &n);
    printf("\n\n\nEl equivalente decimal de %d es  %d\n\n", n, binary_decimal(n)); // llamada a la función
    printf("\n\n\t\t\tCodificar es divertido!\n\n\n");
    return 0;
}

// Definición de la función para convertir binario a decimal.
int binary_decimal(int n)
{
    int decimal = 0, i = 0, rem;
    while(n!= 0)
    {
        rem = n%10;   // da el dígito en la posición de las unidades
        n = n/10; // da el número excluyendo su dígito de las unidades
        /*
            pow es una función definida por el sistema que toma
            dos enteros como parámetros de entrada
        */
        decimal += rem*pow(2, i++);
    }
    /*
        devuelve el equivalente decimal del número binario de entrada
        a la llamada de la función
    */
    return decimal;
}

Conversión de octal a decimal

El octal es un sistema numérico que utiliza ocho dígitos, del 0 al 7. Aquí está el programa en C que convierte un número octal en su equivalente decimal:

#include<stdio.h>
#include<math.h>

int main()
{
    printf("\n\n\t\tLabEx - Mejor lugar para aprender\n\n\n");
    long int octal, val, decimal = 0;
    int i = 0;
    printf("Ingrese cualquier número octal: ");
    scanf("%ld", &val);
    octal = val;
    while(octal!= 0)
    {
        /*
            i++ es un incremento posteriore, donde el valor se
            asigna primero y luego se incrementa
        */
      decimal += (octal % 10)*pow(8, i++);
      octal/=10;    // lo mismo que octal=octal/10
    }
    printf("\n\n\nEl valor decimal equivalente de %ld es %ld\n\n\n", val, decimal);
    printf("\n\n\t\t\tCodificar es divertido!\n\n\n");
    return 0;
}

Conversión de decimal a binario (sin recursión)

Aquí está el programa en C que convierte un número decimal en su equivalente binario sin recursión:

#include<stdio.h>

int main()
{
    printf("\n\n\t\tLabEx - Mejor lugar para aprender\n\n\n");
    int n,c,k;
    printf("Ingrese un entero en el sistema de números decimales: ");
    scanf("%d", &n);

    // En formato de 31 bits
    printf("\n\n\nEl equivalente binario del valor decimal %d es:", n);

    for(c = 31; c >= 0; c--)
    {
        k = n>>c;
        /*
            num&1 = devuelve verdadero si el último dígito de num es 1
            de lo contrario falso
        */
        if(k&1)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
    printf("\n\n\t\t\tCodificar es divertido!\n\n\n");
    return 0;
}

Conversión de decimal a binario (con recursión)

Aquí está el programa en C que convierte un número decimal en su equivalente binario con recursión:

#include<stdio.h>

// Declaraciones del prototipo de la función
void decimal_binary(int );
void F(int );
void reverse(int );

int main()
{
    printf("\n\n\t\tLabEx - Mejor lugar para aprender\n\n\n");
    int n;
    printf("\n\nIngrese un entero en el sistema de números decimales: ");
    scanf("%d", &n);

    // En formato de 31 bits
    printf("\n\nEl equivalente binario del valor decimal %d usando el método decimal_binary es: ", n);

    decimal_binary(n);  // llamada a la función

    printf("\n\nEl equivalente binario del valor decimal %d usando el método F() es: ", n);
    F(n);   // llamada a la función
    printf("\n\nLa inversión de la representación binaria del valor %d es: ", n);
    reverse(n); // llamada a la función
    printf("\n\n\t\t\tCodificar es divertido!\n\n\n");
    return 0;
}

// definición de la función
void decimal_binary(int i)
{
    if(i <= 1)
    printf("%d", i);   // para imprimir en formato de arriba hacia abajo
    else
    {
        decimal_binary(i/2);
        printf("%d", i%2);
    }
}

void F(int j)
{
    if(j/2)
    {
        F(j/2);
    }
    printf("%d", j%2);
}

void reverse(int k)
{
    if(k <= 1)
        printf("%d", k);
    else
    {
        printf("%d", k%2);
        F(k/2);
    }
    printf("\n\n");
}

Resumen

En este laboratorio, hemos presentado programas que pueden convertir números entre diferentes sistemas numéricos. Cubrimos la conversión de binario a decimal, octal a decimal y decimal a binario (con y sin recursión). Esperamos que este laboratorio haya ayudado a comprender cómo convertir números entre diferentes sistemas numéricos en el programa de C.