# Gray Code in Matlab – from/to binary and decimal

 The Gray code (also known as reflected binary code), is a binary numerical system where two consecutive values differ in only one bit. The Gray code code was originally designed to prevent undesired transient states or outputs from electro- mechanical switches. Today, this code is used to facilitate error correction in digital communications and digital-to-analog converters.

In this article, we’re going to develop a simple Matlab algorithm to make conversions between (from/to) binary and gray codes.

### Convert a binary number to a Gray number

Let’s understand the algorithm to go from binary to Gray. See the conversion from ‘11101’ binary to its equivalent in Gray code.

The most significant bit (MSB) in Gray is taken directly from the MSB in binary. The rest of the Gray bits comes from a xor operation between the precedent binary bit(b(i-1)) and the current binary bit (b(i)). In the case shown in the figure above:

g(1) = b(1)
g(2) = b(1) xor b(2)
g(3) = b(2) xor b(3)
g(4) = b(3) xor b(4)
g(5) = b(4) xor b(5)

The xor operation produces a 1 if the bits are different, and produces a 0 if the bits are equal. So, a binary ‘11101’ becomes a ‘10011’ in Gray.

Let’s propose a code in Matlab to do it.

function g = bin2gray(b)
g(1) = b(1);

for i = 2 : length(b);
x = xor(str2num(b(i-1)), str2num(b(i)));
g(i) = num2str(x);

end

The input parameter to this function is a binary number (expressed in a string), the output is the equivalent Gray number (also expressed as a string).

g = bin2gray('11101')
g = bin2gray(
'10010')
g = bin2gray(
'11110')
g = bin2gray(
'10000')

We get these string-results from Matlab:

g = 10011
g = 11011
g = 10001
g = 11000

We also can test a full sequence. We go from decimal-to-binary (using built-in function dec2bin) and then to Gray (using our developed function), for example:

for d = 0 : 15
b = dec2bin(d);
g = bin2gray(b);
disp({d b g})

end

The results are (decimal, binary, gray):

[0] '0' '0'
[1] '1' '1'
[2] '10' '11'
[3] '11' '10'
[4] '100' '110'
[5] '101' '111'
[6] '110' '101'
[7] '111' '100'
[8] '1000' '1100'
[9] '1001' '1101'
[10] '1010' '1111'
[11] '1011' '1110'
[12] '1100' '1010'
[13] '1101' '1011'
[14] '1110' '1001'
[15] '1111' '1000'

### Convert a Gray number to a binary number

Now let’s understand the algorithm to go from Gray to binary. See the conversion from ‘10011’ Gray to its binary equivalent.

The most significant bit (MSB) in binary is taken directly from the MSB in Gray. The rest of the binary bits comes from a xor operation between the precedent binary bit (b(i-1)) and the current Gray bit (g(i)). In the case shown in the figure above:

b(1) = g(1)
b(2) = b(1) xor g(2)
b(3) = b(2) xor g(3)
b(4) = b(3) xor g(4)
b(5) = b(4) xor g(5)

Our proposed Matlab function to achieve the conversion is:

function
b = gray2bin(g)
b(1) = g(1);

for i = 2 : length(g);
x = xor(str2num(b(i-1)), str2num(g(i)));
b(i) = num2str(x);

end

Let’s test our function:

b = gray2bin('10011')
b = gray2bin(
'11011')
b = gray2bin(
'10001')
b = gray2bin(
'11000')

We get these string-results:

b = 11101
b = 10010
b = 11110
b = 10000

And now we test a full sequence, going decimal-to-binary, binary-to-gray, and gray-to-binary:

for d = 0 : 15
g = bin2gray(dec2bin(d));
b = gray2bin(g);
disp({d g b})

end

We get (decimal, gray, binary):

[0] '0' '0'
[1] '1' '1'
[2] '11' '10'
[3] '10' '11'
[4] '110' '100'
[5] '111' '101'
[6] '101' '110'
[7] '100' '111'
[8] '1100' '1000'
[9] '1101' '1001'
[10] '1111' '1010'
[11] '1110' '1011'
[12] '1010' '1100'
[13] '1011' '1101'
[14] '1001' '1110'
[15] '1000' '1111'

From 'Gray Code' to home

From 'Gray Code' to 'Matlab Cookbook II'

## Related pages

decimal octal conversionpolar plot in matlabsemilogx matlabwriting function in matlabcosine approximationmatlab linear fittingpermutations calcdecimal code converterchol matlabsolve matlab functionmatlab lessonsdecimal to octal converter onlinehow to do dot product in matlabintegrand calculatorrate of depreciation calculatormatlab programming with applications for engineersoctal conversionascii lookup tablehexadecimal to decimal methodascii characters chartconvert ascii to charrectangle matlabcollatz sequencescilab programs examplesxor booleantaylor series of cosinehexadecimal to octal conversion methodmatlab plot for loopinterest compounded continuously formularecursive programming examplesgraycodematlab sequence of numbersmotorcycle resale value calculatorsketch piecewise functionresistor capacitor networkfrom decimal to binary calculatoriteration matlabmultiple regression matlabbinary to octal convertergauss jordan method matrixsimultaneous equation solver with workinghistogram matlab coderecursion formula calculatormatrices gauss jordanvswr chartbinary code converter to numberspolyfit fittingsmatlab textscancosine series expansionhexadecimal to binary conversion tablematlab quadratureterminate matlab programbabylonian square rootamoritization tablesheaviside function integralsubplot matlab examplepascal for loopsimultaneous equation examplefit tool matlabmatlab idehow to convert from cartesian to polarintegrals in matlabexample of bisection methodmatlab rectangle functionohms law calculator appconversion of binary to gray codeexponential decay half life formulahow do you calculate your bmi manuallymatlab matrix solvematlab gaussian fitinterest amortization tablesgauss graphsolve definite integrals onlineroot finding bisection methodtrigonometric functions matlab