# C Program to Convert Binary to Gray Code without Recursion

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

Gray code, also known as reflected binary code, is a binary numeral system where adjacent values differ in only one bit position. It finds applications in various areas such as analog-to-digital converters, error detection, and rotary encoders. Unlike traditional binary representation, Gray code ensures that only one bit changes at a time during transitions between consecutive values.

## Problem Statement

The program should allow the user to input a binary number and output its Gray code, as well as input a Gray code and output its corresponding binary number. The program should not use recursion for the conversion process.

Example:

Input: Enter a binary number: 1010

Output: Gray code: 523 Binary code: 1010

Note: The program should handle valid input values within the range of unsigned integers.

## C Program to Convert Binary to Gray Code without Recursion

```#include <stdio.h>

// Function to convert binary to gray code
unsigned int binaryToGray(unsigned int num)
{
return (num >> 1) ^ num;
}

// Function to convert gray code to binary
unsigned int grayToBinary(unsigned int num)
{
{
}
return num;
}

int main()
{
unsigned int binary, gray;

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

gray = binaryToGray(binary);
printf("Gray code: %u\n", gray);

binary = grayToBinary(gray);
printf("Binary code: %u\n", binary);

return 0;
}
```

## How it Works

The C program works by implementing two functions: `binaryToGray()` and `grayToBinary()`, which handle the conversion between binary and Gray code.

1. `binaryToGray()` Function:
• It takes an unsigned integer `num` as input, which represents a binary number.
• Inside the function, the binary-to-Gray conversion is performed using the following steps:
• The `num` value is right-shifted by 1 (`num >> 1`), which moves all the bits one position to the right.
• The result of the right shift is then XORed with the original `num` value (`num ^ (num >> 1)`).
• The XOR operation between the shifted and original number generates the Gray code representation of the binary number.
• The Gray code value is returned as the output of the function.
2. `grayToBinary()` Function:
• It takes an unsigned integer `num` as input, which represents a Gray code.
• Inside the function, the Gray-to-binary conversion is performed using the following steps:
• A mask variable is initialized as `num >> 1`, which shifts the `num` value one position to the right.
• A loop is executed until the mask becomes zero:
• Inside the loop, the `num` value is XORed with the mask (`num ^ mask`).
• The result is stored back in the `num` variable.
• The mask is right-shifted by 1 (`mask = mask >> 1`).
• After the loop completes, the final `num` value represents the binary representation of the Gray code.
• The binary code value is returned as the output of the function.
3. `main()` Function:
• The `main()` function is the entry point of the program.
• It prompts the user to enter a binary number.
• The binary number is read from the user using the `scanf()` function and stored in the variable `binary`.
• The `binaryToGray()` function is called with the `binary` value to convert it to Gray code, and the result is stored in the variable `gray`.
• The Gray code value is displayed as output using `printf()`.
• The `grayToBinary()` function is called with the `gray` value to convert it back to binary, and the result is stored in the variable `binary`.
• The binary code value is displayed as output using `printf()`.

The program follows the same process for each conversion scenario, allowing the user to input a binary number and obtain its corresponding Gray code, or input a Gray code and obtain its corresponding binary number.