Conversão entre Sistemas Numéricos

CBeginner
Pratique Agora

Introdução

Sistemas numéricos são formas de representar números usando diferentes símbolos e operações matemáticas. A conversão entre diferentes sistemas numéricos é uma tarefa comum em programação. Neste laboratório, demonstraremos programas que podem converter números de um sistema para outro. Abordaremos:

  • Conversão de Binário para Decimal
  • Conversão de Octal para Decimal
  • Conversão de Decimal para Binário (sem recursão)
  • Conversão de Decimal para Binário (com recursão)

Nota: Você precisa criar o arquivo ~/project/main.c por conta própria para praticar a codificação e aprender como compilar e executá-lo usando gcc.

cd ~/project
## create main.c
touch main.c
## compile main.c
gcc main.c -o main
## run main
./main

Conversão de Binário para Decimal

Binário é um sistema numérico que usa apenas dois dígitos, 0 e 1. Decimal é um sistema numérico que usa dez dígitos, de 0 a 9. Aqui está o programa em C que converte um número binário para seu equivalente decimal:

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

// Declaração do protótipo da função
int binary_decimal(int n);

int main()
{
    printf("\n\n\t\tLabEx - O melhor lugar para aprender\n\n\n");
    int n;
    char c;
    printf("Digite o número binário: ");
    scanf("%d", &n);
    printf("\n\n\nO equivalente decimal de %d é  %d\n\n", n, binary_decimal(n)); // chamada da função
    printf("\n\n\t\t\tProgramar é Divertido !\n\n\n");
    return 0;
}

// Definição da função para converter binário para decimal.
int binary_decimal(int n)
{
    int decimal = 0, i = 0, rem;
    while(n != 0)
    {
        rem = n%10;   // dá o dígito na casa das unidades
        n = n/10; // dá o número excluindo seu dígito das unidades
        /*
            pow é uma função definida pelo sistema que recebe
            dois inteiros como parâmetros de entrada
        */
        decimal += rem*pow(2, i++);
    }
    /*
        retorna o equivalente decimal do número binário
        de entrada para a chamada da função
    */
    return decimal;
}

Conversão de Octal para Decimal

Octal é um sistema numérico que usa oito dígitos, de 0 a 7. Aqui está o programa em C que converte um número octal para seu equivalente decimal:

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

int main()
{
    printf("\n\n\t\tLabEx - O melhor lugar para aprender\n\n\n");
    long int octal, val, decimal = 0;
    int i = 0;
    printf("Digite qualquer número octal: ");
    scanf("%ld", &val);
    octal = val;
    while(octal != 0)
    {
        /*
            i++ é pós-incremento, onde o valor é
            primeiro atribuído e depois incrementado
        */
      decimal += (octal % 10)*pow(8, i++);
      octal/=10;    // o mesmo que octal=octal/10
    }
    printf("\n\n\nO valor decimal equivalente de %ld é %ld\n\n\n", val, decimal);
    printf("\n\n\t\t\tProgramar é Divertido !\n\n\n");
    return 0;
}

Conversão de Decimal para Binário (sem Recursão)

Aqui está o programa em C que converte um número decimal para seu equivalente binário sem recursão:

#include<stdio.h>

int main()
{
    printf("\n\n\t\tLabEx - O melhor lugar para aprender\n\n\n");
    int n,c,k;
    printf("Digite um inteiro no sistema de numeração decimal: ");
    scanf("%d", &n);

    // Em formato de 31 bits
    printf("\n\n\nO equivalente binário do valor decimal %d é:", n);

    for(c = 31; c >= 0; c--)
    {
        k = n>>c;
        /*
            num&1 = retorna verdadeiro se o último dígito de num for 1
            senão falso
        */
        if(k&1)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
    printf("\n\n\t\t\tProgramar é Divertido !\n\n\n");
    return 0;
}

Conversão de Decimal para Binário (com Recursão)

Aqui está o programa em C que converte um número decimal para seu equivalente binário com recursão:

#include<stdio.h>

//Declarações de protótipos de função
void decimal_binary(int );
void F(int );
void reverse(int );

int main()
{
    printf("\n\n\t\tLabEx - O melhor lugar para aprender\n\n\n");
    int n;
    printf("\n\nDigite um inteiro no sistema de numeração decimal: ");
    scanf("%d", &n);

    //Em formato de 31 bits
    printf("\n\nO equivalente binário do valor decimal %d usando o método decimal_binary é: ", n);

    decimal_binary(n);  // chamada de função

    printf("\n\nO equivalente binário do valor decimal %d usando o método F() é: ", n);
    F(n);   // chamada de função
    printf("\n\nA inversão da representação binária do valor %d é: ", n);
    reverse(n); // chamada de função
    printf("\n\n\t\t\tProgramar é Divertido !\n\n\n");
    return 0;
}

// definição da função
void decimal_binary(int i)
{
    if(i <= 1)
    printf("%d", i);   // para imprimir em formato de cima para baixo
    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");
}

Resumo

Neste laboratório, apresentamos programas que podem converter números entre diferentes sistemas numéricos. Cobrimos a conversão de binário para decimal, octal para decimal e decimal para binário (com e sem recursão). Esperamos que este laboratório tenha ajudado você a entender como converter números entre diferentes sistemas numéricos em programação C.