Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Decimal Equivalent of Gray Code and its Inverse

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Given a decimal number n. Find the gray code of this number in decimal form.

Examples: 

Input :
Output :
Explanation: 7 is represented as 111 in binary form. The equivalent gray code 
of 111 is 100 in binary form, whose decimal equivalent is 4.

Input : 10 
Output : 15 
Explanation: 10 is represented as 1010 in binary form. The equivalent gray code 
of 1010 is 1111 in binary form, whose decimal equivalent is 15. 

Recommended Practice

The following table shows the conversion of binary code values to gray code values: 

Decimal ValueBinary EquivalentGray Code EquivalentDecimal Value of Gray Code Equivalent
00000000
10010011
20100113
30110102
41001106
51011117
61101015
71111004

Below is the approach for the conversion of decimal code values to gray code values. 
Let G(n) be the Gray code equivalent of binary representation n. Consider bits of a number n and a number bit G(n). Note that the leftmost set bits of both n and G(n) are in the same position. Let this position be i and positions on the right of it be (i+1), (i+2), etc. The (i + 1)th bit in G(n) is 0 if (i+1)th bit in n is 1 and vice versa is also true. The same is true for (i+2)-th bits, etc. Thus we have G (n) = n xor (n >> 1): 

C++




// CPP Program to convert given
// decimal number into decimal
// equivalent of its gray code form
#include <bits/stdc++.h>
using namespace std;
 
int grayCode(int n)
{
    /* Right Shift the number by 1
       taking xor with original number */
    return n ^ (n >> 1);
}
 
// Driver Code
int main()
{
    int n = 10;
    cout << grayCode(n) << endl;
    return 0;
}

Java




// Java Program to convert given
// decimal number into decimal
// equivalent of its gray code form
class GFG {
     
    static int grayCode(int n)
    {
         
        // Right Shift the number
        // by 1 taking xor with
        // original number
        return n ^ (n >> 1);
    }
 
    // Driver Code
    public static void main(String[] args)
    {
         
        int n = 10;
         
        System.out.println(grayCode(n));
    }
}
 
// This code is contributed by
// Smitha Dinesh Semwal

Python3




# Python 3 Program to convert
# given decimal number into
# decimal equivalent of its
# gray code form
 
def grayCode(n):
 
    # Right Shift the number
    # by 1 taking xor with
    # original number
    return n ^ (n >> 1)
 
 
# Driver Code
n = 10
print(grayCode(n))
 
# This code is contributed
# by Smitha Dinesh Semwal

C#




// C# Program to convert given
// decimal number into decimal
// equivalent of its gray code form
using System;
 
public class GFG {
     
    // Function for conversion
    public static int grayCode(int n)
    {
         
        // Right Shift the number
        // by 1 taking xor with
        // original number
        return n ^ (n >> 1);
    }
     
    // Driver Code
    static public void Main ()
    {
        int n = 10;
         
        Console.WriteLine(grayCode(n));
    }
}
 
// This code is contributed by Ajit.

PHP




<?php
// PHP Program to convert given
// decimal number into decimal
// equivalent of its gray code form
 
function grayCode($n)
{
    /* Right Shift the number by 1
       taking xor with original
       number */
    return $n ^ ($n >> 1);
}
 
    // Driver Code
    $n = 10;
    echo grayCode($n) ;
 
// This code is contributed by nitin mittal.
?>

Javascript




<script>
  
// Javascript Program to convert given
// decimal number into decimal
// equivalent of its gray code form
 
function grayCode(n)
{
    /* Right Shift the number by 1
       taking xor with original number */
    return n ^ (n >> 1);
}
 
// Driver Code
var n = 10;
document.write( grayCode(n) );
 
 
</script>

Output: 

15

 

Time Complexity: O(1) 
Auxiliary Space: O(1)

Finding the Inverse Gray Code 
Given a decimal equivalent number n of a gray code. Find its original number in decimal form.

Examples: 

Input : 4 
Output : 7

Input : 15 
Output : 10

Below is the approach for the conversion of gray code values to decimal code values. 
We will go from the older bits to the younger ones (even the smallest bit has the number 1, and the oldest bit is numbered k). We obtain such relations between the bits of the ni number n and the bits of the gi number g: 

 Steps to solve this problem:

  • Initialize a variable inv to 0.
  •  Iterate over the binary digits of n from the rightmost digit to the leftmost digit and right shift n by one bit.
    • Take the bitwise XOR of the current value of inv with the value of n.
  • return the value of inv.
 nk = gk, 
 nk-1 = gk-1 xor nk = gk xor gk-1
 nk-2 = gk-2 xor nk-1 = gk xor gk-1 xor gk-2 
 nk-3 = gk-3 xor nk-2 = gk xor gk-1 xor gk-2 xor gk-3
 ... 

C++




// CPP Program to convert given
// decimal number of gray code
// into its inverse in decimal form
#include <bits/stdc++.h>
using namespace std;
 
int inversegrayCode(int n)
{
    int inv = 0;
 
    // Taking xor until n becomes zero
    for (; n; n = n >> 1)
        inv ^= n;
 
    return inv;
}
 
// Driver Code
int main()
{
    int n = 15;
    cout << inversegrayCode(n) << endl;
    return 0;
}

Java




// Java Program to convert given
// decimal number of gray code
// into its inverse in decimal form
import java.io.*;
 
class GFG {
     
    // Function to convert given
    // decimal number of gray code
    // into its inverse in decimal form
    static int inversegrayCode(int n)
    {
        int inv = 0;
     
        // Taking xor until n becomes zero
        for ( ; n != 0 ; n = n >> 1)
            inv ^= n;
     
        return inv;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int n = 15;
        System.out.println(inversegrayCode(n));
    }
}
 
// This code is contributed by Ajit.

Python3




# Python3 Program to convert
# given decimal number of
# gray code into its inverse
# in decimal form
 
def inversegrayCode(n):
    inv = 0;
     
    # Taking xor until
    # n becomes zero
    while(n):
        inv = inv ^ n;
        n = n >> 1;
    return inv;
 
# Driver Code
n = 15;
print(inversegrayCode(n));
 
# This code is contributed
# by mits

C#




// C# Program to convert given
// decimal number of gray code
// into its inverse in decimal form
using System;
 
class GFG {
     
    // Function to convert given
    // decimal number of gray code
    // into its inverse in decimal form
    static int inversegrayCode(int n)
    {
        int inv = 0;
     
        // Taking xor until n becomes zero
        for ( ; n != 0 ; n = n >> 1)
            inv ^= n;
     
        return inv;
    }
     
    // Driver code
    public static void Main ()
    {
        int n = 15;
        Console.Write(inversegrayCode(n));
    }
}
 
// This code is contributed by nitin mittal.

PHP




<?php
// PHP Program to convert given
// decimal number of gray code
// into its inverse in decimal form
 
function inversegrayCode( $n)
{
    $inv = 0;
 
    // Taking xor until
    // n becomes zero
    for (; $n; $n = $n >> 1)
        $inv ^= $n;
 
    return $inv;
}
 
    // Driver Code
    $n = 15;
    echo inversegrayCode($n);
 
// This code is contributed by anuj_67.
?>

Javascript




<script>
 
// JavaScript Program to convert given
// decimal number of gray code
// into its inverse in decimal form
 
function inversegrayCode(n)
{
    let inv = 0;
 
    // Taking xor until n becomes zero
    for (; n; n = n >> 1)
        inv ^= n;
 
    return inv;
}
 
// Driver Code
    let n = 15;
    document.write(inversegrayCode(n));
     
</script>

Output: 

10

 

Time Complexity: O(log n) 
Auxiliary Space: O(1)

Please suggest if someone has a better solution which is more efficient in terms of space and time.
This article is contributed by Aarti_Rathi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above


My Personal Notes arrow_drop_up
Last Updated : 07 Mar, 2023
Like Article
Save Article
Similar Reads
Related Tutorials