Last Updated : 23 Jul, 2025
Try it on GfG Practice
Binary Number is the default way to store numbers, but in many applications, binary numbers are difficult to use and a variety of binary numbers is needed. This is where Gray codes are very useful.
Gray code has a property that two successive numbers differ in only one bit because of this property gray code does the cycling through various states with minimal effort and is used in K-maps, error correction, communication, etc.
How to Convert Binary To Gray and Vice Versa?
Binary : 0011
Gray : 0010Binary : 01001
Gray : 01101
Binary to Gray conversion :
Gray to binary conversion :
Below is the implementation of the above approach:
// C++ program for Binary To Gray
// and Gray to Binary conversion
#include <bits/stdc++.h>
using namespace std;
// Function to find xor of two
// bits represented as character.
char xorChar(char a, char b) {
return (a == b) ? '0' : '1';
}
// Function to flip a bit
// represented as character.
char flip(char c) {
return (c == '0') ? '1' : '0';
}
// function to convert binary string
// to gray string
string binToGrey(string binary) {
string gray = "";
// MSB of gray code is same as binary code
gray += binary[0];
// Compute remaining bits, next bit is computed by
// doing XOR of previous and current in Binary
for (int i = 1; i < binary.length(); i++) {
// Concatenate XOR of previous bit
// with current bit
gray += xorChar(binary[i - 1], binary[i]);
}
return gray;
}
// function to convert gray code string
// to binary string
string greyToBin(string gray) {
string binary = "";
// MSB of binary code is same as gray code
binary += gray[0];
// Compute remaining bits
for (int i = 1; i < gray.length(); i++) {
// If current bit is 0, concatenate
// previous bit
if (gray[i] == '0')
binary += binary[i - 1];
// Else, concatenate invert of
// previous bit
else
binary += flip(binary[i - 1]);
}
return binary;
}
int main() {
string binary = "01001";
cout << binToGrey(binary) << endl;
string gray = "01101";
cout << greyToBin(gray) << endl;
return 0;
}
Java
// Java program for Binary To Gray
// and Gray to Binary conversion
class GfG {
// Function to find xor of two
// bits represented as character.
static char xorChar(char a, char b) {
return (a == b) ? '0' : '1';
}
// Function to flip a bit
// represented as character.
static char flip(char c) {
return (c == '0') ? '1' : '0';
}
// function to convert binary string
// to gray string
static String binToGrey(String binary) {
String gray = "";
// MSB of gray code is same as binary code
gray += binary.charAt(0);
// Compute remaining bits, next bit is computed by
// doing XOR of previous and current in Binary
for (int i = 1; i < binary.length(); i++) {
// Concatenate XOR of previous bit
// with current bit
gray += xorChar(binary.charAt(i - 1), binary.charAt(i));
}
return gray;
}
// function to convert gray code string
// to binary string
static String greyToBin(String gray) {
String binary = "";
// MSB of binary code is same as gray code
binary += gray.charAt(0);
// Compute remaining bits
for (int i = 1; i < gray.length(); i++) {
// If current bit is 0, concatenate
// previous bit
if (gray.charAt(i) == '0')
binary += binary.charAt(i - 1);
// Else, concatenate invert of
// previous bit
else
binary += flip(binary.charAt(i - 1));
}
return binary;
}
public static void main(String[] args) {
String binary = "01001";
System.out.println(binToGrey(binary));
String gray = "01101";
System.out.println(greyToBin(gray));
}
}
Python
# Python program for Binary To Gray
# and Gray to Binary conversion
# Function to find xor of two
# bits represented as character.
def xorChar(a, b):
return '0' if a == b else '1'
# Function to flip a bit
# represented as character.
def flip(c):
return '1' if c == '0' else '0'
# function to convert binary string
# to gray string
def binToGrey(binary):
gray = ""
# MSB of gray code is same as binary code
gray += binary[0]
# Compute remaining bits, next bit is computed by
# doing XOR of previous and current in Binary
for i in range(1, len(binary)):
# Concatenate XOR of previous bit
# with current bit
gray += xorChar(binary[i - 1], binary[i])
return gray
# function to convert gray code string
# to binary string
def greyToBin(gray):
binary = ""
# MSB of binary code is same as gray code
binary += gray[0]
# Compute remaining bits
for i in range(1, len(gray)):
# If current bit is 0, concatenate
# previous bit
if gray[i] == '0':
binary += binary[i - 1]
# Else, concatenate invert of
# previous bit
else:
binary += flip(binary[i - 1])
return binary
if __name__ == "__main__":
binary = "01001"
print(binToGrey(binary))
gray = "01101"
print(greyToBin(gray))
C#
// C# program for Binary To Gray
// and Gray to Binary conversion
using System;
using System.Text;
class GfG {
// Function to find XOR of two
// bits represented as characters
static char xorChar(char a, char b) {
return (a == b) ? '0' : '1';
}
// Function to flip a bit
// represented as a character
static char flip(char c) {
return (c == '0') ? '1' : '0';
}
// Function to convert binary
// string to gray string
static string binToGrey(string binary) {
StringBuilder gray = new StringBuilder();
// MSB of gray code is
// same as binary code
gray.Append(binary[0]);
// Compute remaining bits
for (int i = 1; i < binary.Length; i++) {
gray.Append(xorChar(binary[i - 1], binary[i]));
}
return gray.ToString();
}
// Function to convert gray code
// string to binary string
static string greyToBin(string gray) {
StringBuilder binary = new StringBuilder();
// MSB of binary code is same as gray code
binary.Append(gray[0]);
// Compute remaining bits
for (int i = 1; i < gray.Length; i++) {
if (gray[i] == '0')
binary.Append(binary[i - 1]);
else
binary.Append(flip(binary[i - 1]));
}
return binary.ToString();
}
static void Main() {
string binary = "01001";
Console.WriteLine(binToGrey(binary));
string gray = "01101";
Console.WriteLine(greyToBin(gray));
}
}
JavaScript
// JavaScript program for Binary To Gray
// and Gray to Binary conversion
// Function to find xor of two
// bits represented as character.
function xorChar(a, b) {
return (a === b) ? '0' : '1';
}
// Function to flip a bit
// represented as character.
function flip(c) {
return (c === '0') ? '1' : '0';
}
// function to convert binary string
// to gray string
function binToGrey(binary) {
let gray = "";
// MSB of gray code is same as binary code
gray += binary[0];
// Compute remaining bits, next bit is computed by
// doing XOR of previous and current in Binary
for (let i = 1; i < binary.length; i++) {
// Concatenate XOR of previous bit
// with current bit
gray += xorChar(binary[i - 1], binary[i]);
}
return gray;
}
// function to convert gray code string
// to binary string
function greyToBin(gray) {
let binary = "";
// MSB of binary code is same as gray code
binary += gray[0];
// Compute remaining bits
for (let i = 1; i < gray.length; i++) {
// If current bit is 0, concatenate
// previous bit
if (gray[i] === '0')
binary += binary[i - 1];
// Else, concatenate invert of
// previous bit
else
binary += flip(binary[i - 1]);
}
return binary;
}
let binary = "01001";
console.log(binToGrey(binary));
let gray = "01101";
console.log(greyToBin(gray));
Time Complexity: O(n), where n is length of the binary string.
Auxiliary Space: O(n)
If the binary code and gray code is given in integer format, then we can use bitwise operators to convert the codes. Below is the implementation using bitwise operators:
C++
// C++ program for Binary To Gray
// and Gray to Binary conversion
#include <bits/stdc++.h>
using namespace std;
int binToGrey(int n) {
return n ^ (n >> 1);
}
int greyToBin(int n) {
int res = n;
while (n > 0) {
n >>= 1;
res ^= n;
}
return res;
}
int main() {
int binary = 3;
cout << binToGrey(binary) << endl;
int gray = 2;
cout << greyToBin(gray) << endl;
return 0;
}
Java
// Java program for Binary To Gray
// and Gray to Binary conversion
class GfG {
// Function to convert binary to gray
static int binToGrey(int n) {
return n ^ (n >> 1);
}
// Function to convert gray to binary
static int greyToBin(int n) {
int res = n;
while (n > 0) {
n >>= 1;
res ^= n;
}
return res;
}
public static void main(String[] args) {
int binary = 3;
System.out.println(binToGrey(binary));
int gray = 2;
System.out.println(greyToBin(gray));
}
}
Python
# Python program for Binary To Gray
# and Gray to Binary conversion
# Function to convert binary to gray
def binToGrey(n):
return n ^ (n >> 1)
# Function to convert gray to binary
def greyToBin(n):
res = n
while n > 0:
n >>= 1
res ^= n
return res
if __name__ == "__main__":
binary = 3
print(binToGrey(binary))
gray = 2
print(greyToBin(gray))
C#
// C# program for Binary To Gray
// and Gray to Binary conversion
using System;
class GfG {
// Function to convert binary to gray
static int binToGrey(int n) {
return n ^ (n >> 1);
}
// Function to convert gray to binary
static int greyToBin(int n) {
int res = n;
while (n > 0) {
n >>= 1;
res ^= n;
}
return res;
}
static void Main() {
int binary = 3;
Console.WriteLine(binToGrey(binary));
int gray = 2;
Console.WriteLine(greyToBin(gray));
}
}
JavaScript
// JavaScript program for Binary To Gray
// and Gray to Binary conversion
// Function to convert binary to gray
function binToGrey(n) {
return n ^ (n >> 1);
}
// Function to convert gray to binary
function greyToBin(n) {
let res = n;
while (n > 0) {
n >>= 1;
res ^= n;
}
return res;
}
let binary = 3;
console.log(binToGrey(binary));
let gray = 2;
console.log(greyToBin(gray));
Time Complexity:
Auxiliary Space: O(1)
Related Article:
Binary To Gray Code Equivalent | DSA Problem
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4