Decimal Equivalent of Gray Code and its Inverse - GeeksforGeeks

08 Jul, 2021
Given a decimal number n. Find the gray code of this number in decimal form.
Examples: 
Input : 7 Output : 4 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. 
The following table shows the conversion of binary code values to gray code values: 
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++
Java
Python3
C#
PHP
Javascript
// 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 Codeint main(){    int n = 10;    cout << grayCode(n) << endl;    return 0;}
// Java Program to convert given// decimal number into decimal// equivalent of its gray code formclass 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
# 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 Coden = 10print(grayCode(n)) # This code is contributed# by Smitha Dinesh Semwal
// C# Program to convert given// decimal number into decimal// equivalent of its gray code formusing 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 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.?>
<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 Codevar n = 10;document.write( grayCode(n) );  </script>
15
 
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 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:  
 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++
Java
Python3
C#
PHP
Javascript
// 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 Codeint main(){    int n = 15;    cout << inversegrayCode(n) << endl;    return 0;}
// Java Program to convert given// decimal number of gray code// into its inverse in decimal formimport 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 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 Coden = 15;print(inversegrayCode(n)); # This code is contributed# by mits
// C# Program to convert given// decimal number of gray code// into its inverse in decimal formusing 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 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.?>
<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>
10
 
Smitha Dinesh Semwal
jit_t
nitin mittal
vt_m
Mithun Kumar
javademon
rutvik_56
rishavmahato348
nityavedanta3
base-conversion
binary-representation
gray-code
Bit Magic
Mathematical
Technical Scripter
Mathematical
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Set, Clear and Toggle a given bit of a number in C
Write an Efficient Method to Check if a Number is Multiple of 3
Highest power of 2 less than or equal to given number
Swap bits in a given number
Check for Integer Overflow
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7