Gray-koodi

Gray-koodilla tarkoitetaan lukujen 0 , 1 , . . . , 2 n 1 {\displaystyle 0,1,...,2^{n}-1} (missä n {\displaystyle n} on positiivinen kokonaisluku) koodaamista binäärisillä symboleilla (biteillä) siten, että lukuesityksestä seuraavaan siirryttäessä täsmälleen yksi bitti vaihtaa tilaansa. Toisin sanoen peräkkäisten lukuesitysten välinen Hammingin etäisyys on yksi. Mikäli ensimmäisen ja viimeisen koodatun luvun välinen Hammingin etäisyys on yksi, Gray-koodi on syklinen.

Esimerkki kolmen bitin syklisestä Gray-koodista:

Luku Binäärikoodi Gray-koodi
0 000 000
1 001 001
2 010 011
3 011 010
4 100 110
5 101 111
6 110 101
7 111 100

Esimerkki 4-bittisestä syklisestä Gray-koodista:

Luku Binäärikoodi Gray-koodi
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000

Matemaattisessa mielessä n {\displaystyle n} -pituinen Gray-koodi antaa kauppamatkustajan ongelman ratkaisun n {\displaystyle n} -ulotteisessa hyperkuutiossa, kun verkon solmupisteitä (kaupungit) vastaavat kuution kulmat ja jänteitä (tiet) kuution särmät.

Lukua x {\displaystyle x} vastaava Gray-koodi saadaan yksinkertaisesti laskemalla biteittäinen XOR-operaatio (poissulkeva TAI-operaatio) lukujen x {\displaystyle x} ja x / 2 {\displaystyle x/2} binääriesityksistä.

Esimerkiksi GRAY( 6 10 {\displaystyle 6_{10}} )=GRAY( 110 2 {\displaystyle 110_{2}} )=XOR( 110 2 {\displaystyle 110_{2}} , 011 2 {\displaystyle 011_{2}} )= 101 2 {\displaystyle 101_{2}} .

Myös käänteinen operaatio, luvun binääriesityksen laskeminen Gray-koodin perusteella, onnistuu biteittäisillä binäärioperaatioilla helposti. Tällöin pitää vain jakaa Gray-koodiesitystä toistuvasti luvulla 2 (siirto vähemmän merkitsevien bittien suuntaan), kunnes saadaan nolla ja ottaa näin saaduista esityksistä biteittäinen XOR-operaatio.

Esimerkiksi INVERSEGRAY( 101 2 {\displaystyle 101_{2}} )=XOR( 101 2 {\displaystyle 101_{2}} , 010 2 {\displaystyle 010_{2}} , 001 2 {\displaystyle 001_{2}} )= 110 2 {\displaystyle 110_{2}} = 6 10 {\displaystyle 6_{10}} .

Gray-koodeja käytetään hyvin yleisesti erilaisten mittaus- ja säätöjärjestelmien toteuttamisessa. Gray-koodin käytön etuna binäärilukujärjestelmään verrattuna on muun muassa se, että mittauslaitteiden rajapintaefektien vaikutukset mittaustuloksiin minimoituvat.