Gray code
Karnaugh maps
Create functions to encode a number to and decode a number from Gray code.

Display the normal binary representations, Gray code representations, and decoded Gray code values for all 5-bit binary numbers (0-31 inclusive, leading 0's not necessary).

There are many possible Gray codes. The following encodes what is called "binary reflected Gray code."

Encoding (MSB is bit 0, b is binary, g is Gray code):

if b[i-1] = 1
   g[i] = not b[i]
else
   g[i] = b[i]
Or:

g = b xor (b logically right shifted 1 time)
Decoding (MSB is bit 0, b is binary, g is Gray code):

b[0] = g[0]

for other bits:
b[i] = g[i] xor b[i-1]
Reference
 Converting Between Gray and Binary Codes. It includes step-by-step animations.
' version 18-01-2017
' compile with: fbc -s console
 
Function gray2bin(g As UInteger) As UInteger
 
    Dim As UInteger b = g
 
    While g 
        g Shr= 1
        b Xor= g
    Wend
 
    Return b
 
End Function
 
Function bin2gray(b As UInteger) As UInteger
 
    Return b Xor (b Shr 1)
 
End Function
 
' ------=< MAIN >=------
 
Dim As UInteger i
 
Print " i     binary     gray   gra2bin"
Print String(32,"=")
 
For i = 0 To 31
    Print Using "## --> "; i;
    print Bin(i,5); " --> "; 
    Print Bin(bin2gray(i),5); " --> ";
    Print Bin(gray2bin(bin2gray(i)),5)
Next
 
' empty keyboard buffer
While Inkey <> "" : Wend
Print : Print "hit any key to end program"
Sleep
End