Conversion Between Number Systems

CCBeginner
Practice Now

Introduction

Number systems are ways of representing numbers using different symbols and mathematical operations. Converting between different number systems is a common task in programming. In this lab, we will showcase programs that can convert numbers from one system to another. We will cover:

  • Binary to Decimal Conversion
  • Octal to Decimal Conversion
  • Decimal to Binary Conversion (without recursion)
  • Decimal to Binary Conversion (with recursion)

Note: You need to create the file ~/project/main.c yourself to practice coding and learn how to compile and run it using gcc.

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

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("`C`")) -.-> c/UserInteractionGroup(["`User Interaction`"]) c(("`C`")) -.-> c/BasicsGroup(["`Basics`"]) c(("`C`")) -.-> c/ControlFlowGroup(["`Control Flow`"]) c(("`C`")) -.-> c/PointersandMemoryGroup(["`Pointers and Memory`"]) c(("`C`")) -.-> c/FunctionsGroup(["`Functions`"]) c/UserInteractionGroup -.-> c/output("`Output`") c/BasicsGroup -.-> c/comments("`Comments`") c/BasicsGroup -.-> c/variables("`Variables`") c/BasicsGroup -.-> c/data_types("`Data Types`") c/BasicsGroup -.-> c/operators("`Operators`") c/ControlFlowGroup -.-> c/if_else("`If...Else`") c/ControlFlowGroup -.-> c/while_loop("`While Loop`") c/ControlFlowGroup -.-> c/for_loop("`For Loop`") c/UserInteractionGroup -.-> c/user_input("`User Input`") c/PointersandMemoryGroup -.-> c/memory_address("`Memory Address`") c/PointersandMemoryGroup -.-> c/pointers("`Pointers`") c/FunctionsGroup -.-> c/function_parameters("`Function Parameters`") c/FunctionsGroup -.-> c/function_declaration("`Function Declaration`") c/FunctionsGroup -.-> c/recursion("`Recursion`") c/FunctionsGroup -.-> c/math_functions("`Math Functions`") subgraph Lab Skills c/output -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/comments -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/variables -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/data_types -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/operators -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/if_else -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/while_loop -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/for_loop -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/user_input -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/memory_address -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/pointers -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/function_parameters -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/function_declaration -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/recursion -.-> lab-123228{{"`Conversion Between Number Systems`"}} c/math_functions -.-> lab-123228{{"`Conversion Between Number Systems`"}} end

Binary to Decimal Conversion

Binary is a number system that uses only two digits, 0 and 1. Decimal is a number system that uses ten digits, 0 to 9. Here is the C program that converts a binary number to its decimal equivalent:

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

// Function prototype declaration
int binary_decimal(int n);

int main()
{
    printf("\n\n\t\tStudytonight - Best place to learn\n\n\n");
    int n;
    char c;
    printf("Enter the binary number: ");
    scanf("%d", &n);
    printf("\n\n\nThe decimal equivalent of %d is  %d\n\n", n, binary_decimal(n)); // function calling
    printf("\n\n\t\t\tCoding is Fun !\n\n\n");
    return 0;
}

// Definition of the function to convert binary to decimal.
int binary_decimal(int n)
{
    int decimal = 0, i = 0, rem;
    while(n != 0)
    {
        rem = n%10;   // gives the digit at the units place
        n = n/10; // gives the number excluding its units digit
        /*
            pow is a system defined function that takes
            two integers as input parameters
        */
        decimal += rem*pow(2, i++);
    }
    /*
        return the decimal equivalent of the input
        binary number to the function call
    */
    return decimal;
}

Octal to Decimal Conversion

Octal is a number system that uses eight digits, 0 to 7. Here is the C program that converts an octal number to its decimal equivalent:

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

int main()
{
    printf("\n\n\t\tStudytonight - Best place to learn\n\n\n");
    long int octal, val, decimal = 0;
    int i = 0;
    printf("Enter any octal number: ");
    scanf("%ld", &val);
    octal = val;
    while(octal != 0)
    {
        /*
            i++ is post increment, where value is
            first assigned and then incremented
        */
      decimal += (octal % 10)*pow(8, i++);
      octal/=10;    // same as octal=octal/10
    }
    printf("\n\n\nEquivalent decimal value of %ld is %ld\n\n\n", val, decimal);
    printf("\n\n\t\t\tCoding is Fun !\n\n\n");
    return 0;
}

Decimal to Binary Conversion (without Recursion)

Here is the C program that converts a decimal number to its binary equivalent without recursion:

#include<stdio.h>

int main()
{
    printf("\n\n\t\tStudytonight - Best place to learn\n\n\n");
    int n,c,k;
    printf("Enter an integer in decimal number system: ");
    scanf("%d", &n);

    // In 31 bit format
    printf("\n\n\nThe binary equivalent of decimal value %d is:", n);

    for(c = 31; c >= 0; c--)
    {
        k = n>>c;
        /*
            num&1 = returns true if the last digit of num is 1
            else false
        */
        if(k&1)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
    printf("\n\n\t\t\tCoding is Fun !\n\n\n");
    return 0;
}

Decimal to Binary Conversion (with Recursion)

Here is the C program that converts a decimal number to its binary equivalent with recursion:

#include<stdio.h>

//Function prototype declarations
void decimal_binary(int );
void F(int );
void reverse(int );

int main()
{
    printf("\n\n\t\tStudytonight - Best place to learn\n\n\n");
    int n;
    printf("\n\nEnter an integer in decimal number system: ");
    scanf("%d", &n);

    //In 31 bit format
    printf("\n\nThe binary equivalent of decimal value %d using decimal_binary method is: ", n);

    decimal_binary(n);  // function call

    printf("\n\nThe binary equivalent of decimal value %d using F() method is: ", n);
    F(n);   // function call
    printf("\n\nThe Reverse of the binary representation of value %d is: ", n);
    reverse(n); // function call
    printf("\n\n\t\t\tCoding is Fun !\n\n\n");
    return 0;
}

// function definition
void decimal_binary(int i)
{
    if(i <= 1)
    printf("%d", i);   // to print in up to down format
    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");
}

Summary

In this lab, we have showcased programs that can convert numbers between different number systems. We covered binary to decimal conversion, octal to decimal conversion, and decimal to binary conversion (with and without recursion). We hope that this lab has helped you understand how to convert numbers between different number systems in C programming.

Other C Tutorials you may like