C Program to Convert Binary to Gray Code using Recursion

This C program converts a binary number to its corresponding Gray code using recursion.

Binary Code: Binary code is a number system that uses only two digits, 0 and 1. It is the basis of all digital systems and computer operations. Each digit in a binary number is called a bit, and each bit represents a power of 2.

Gray Code: Gray code, also known as reflected binary code, is a binary numeral system where adjacent values differ by only one bit. It is commonly used in various applications such as analog-to-digital converters, error detection, and rotary encoders. The advantage of Gray code is that it prevents errors caused by multiple bits changing simultaneously during transitions.

Problem Statement

Write a C program that converts a binary number to its equivalent Gray code using recursion. The program should prompt the user to enter a binary number and display the corresponding Gray code.

Input:

  • An unsigned integer representing a binary number.

Output:

  • The corresponding Gray code as an unsigned integer.

Example:

Enter a binary number: 1010

Gray code: 1111

Note:

  • The input binary number is assumed to be a 32-bit unsigned integer.
  • The program should use a recursive function to convert the binary number to Gray code.
  • The program should handle invalid inputs appropriately and display error messages if necessary.

C Program to Convert Binary to Gray Code using Recursion

#include <stdio.h>

// Function to convert binary to Gray code
unsigned int binaryToGray(unsigned int num)
{
    if (num == 0)
        return 0;

    unsigned int msb = num & (1 << 31); // Extract the most significant bit

    // Right shift one position and XOR with the original number
    return (msb | (num >> 1)) ^ binaryToGray(num >> 1);
}

int main()
{
    unsigned int binaryNum;

    printf("Enter a binary number: ");
    scanf("%u", &binaryNum);

    unsigned int grayNum = binaryToGray(binaryNum);

    printf("Gray code: %u\n", grayNum);

    return 0;
}

How it Works

  1. The program starts by including the necessary header file stdio.h for input/output operations.
  2. The function binaryToGray is declared. This function takes an unsigned integer num as input and returns the Gray code for that number.
  3. Inside the binaryToGray function, the following steps are performed recursively:
    • Base Case: If the number is 0, meaning there are no more bits to process, the function returns 0, as the Gray code for 0 is also 0.
    • The most significant bit (MSB) of the number is extracted using the bitwise AND operation with (1 << 31). This operation isolates the leftmost bit of the 32-bit number.
    • The number is then right-shifted by one position to discard the MSB. This is done using the right shift operator >>.
    • The function makes a recursive call to itself with the remaining bits of the number (after discarding the MSB).
    • The result obtained from the recursive call is XORed with the MSB. This is done to ensure that adjacent values in the Gray code differ by only one bit.
    • The final result is returned.
  4. In the main function:
    • The program prompts the user to enter a binary number and reads it as an unsigned integer using scanf.
    • The binaryToGray function is called with the input binary number as an argument, and the result is stored in the grayNum variable.
    • Finally, the program prints the calculated Gray code using printf.
  5. The program terminates by returning 0 from the main function.

The recursion in the binaryToGray function processes the bits of the binary number one by one, starting from the most significant bit (MSB) and moving towards the least significant bit (LSB). At each recursive step, the function extracts the MSB, discards it, and processes the remaining bits recursively. The process continues until the base case is reached (num == 0), and the Gray code is constructed by XORing the extracted MSB with the result obtained from the recursive call.

Input /Output

C Program to Convert Binary to Gray Code using Recursion

Explanation:

  • The program prompts the user to enter a binary number.
  • The user enters the binary number 1010.
  • The binaryToGray function is called with the input number 1010.
    • Since 1010 is not equal to 0, the function proceeds with the recursion.
    • The most significant bit (MSB) is extracted, which is 1.
    • The number is right-shifted by one position, resulting in 0101.
    • The function makes a recursive call to binaryToGray with the remaining bits 0101.
      • Again, the number is not equal to 0, so the recursion continues.
      • The MSB is extracted, which is 0.
      • The number is right-shifted by one position, resulting in 0010.
      • Another recursive call is made with the remaining bits 0010.
        • The number is still not equal to 0, so the recursion continues.
        • The MSB is extracted, which is 0.
        • The number is right-shifted by one position, resulting in 0001.
        • Another recursive call is made with the remaining bits 0001.
          • The number is not equal to 0, so the recursion continues.
          • The MSB is extracted, which is 0.
          • The number is right-shifted by one position, resulting in 0000.
          • Another recursive call is made with the remaining bits 0000.
            • The number is now equal to 0, so the base case is reached.
            • The function returns 0.
        • The result of the recursive call is XORed with the MSB 0, resulting in 0.
        • The function returns 0.
      • The result of the recursive call is XORed with the MSB 0, resulting in 0.
      • The function returns 0.
    • The result of the recursive call is XORed with the MSB 1, resulting in 1.
    • The function returns 1.
  • The calculated Gray code 337 is printed as the output.

In this example, the binary number 1010 is converted to its equivalent Gray code 337 using the recursive approach implemented in the program.

Share:

Leave A Reply

Your email address will not be published. Required fields are marked *

You May Also Like

This C program finds the Greatest Common Divisor (GCD) of two given numbers. Problem Statement Write a C program that...
This C program calculates the roots of a quadratic equation of the form ax^2 + bx + c = 0....
This C program allows you to find the length of a linked list, which is the number of nodes present...