| Acest articol sau această secțiune are bibliografia incompletă sau inexistentă. Puteți contribui prin adăugarea de referințe în vederea susținerii bibliografice a afirmațiilor pe care le conține. |
Un cod Gray este codul care îi atribuie unei mulțimi continue de întregi, sau fiecărui membru al unei liste circulare, un cuvânt de simboluri, prin care două cuvinte alăturate diferă printr-un singur simbol. Poate exista mai mult de un cod Gray pentru o lungime dată de cuvânt, iar termenul a fost folosit pentru codul binar pentru întregi nenegativi. Versiunea pe patru biți este aceasta:
0 0000
1 0001
2 0011
3 0010
4 0110
5 0111
6 0101
7 0100
8 1100
9 1101
10 1111
11 1110
12 1010
13 1011
14 1001
15 1000
Codul Gray binar pentru n biți poate fi generat prin recursivitate prin prefixarea unui bit 0 în fața codului Gray pentru n-1 biți, apoi prefixând un bit 1 pentru aceluiași cod pentru n-1 biți, dar reflectat (în ordine inversă).
Algoritmul pentru generare cod Gray ar trebui să arate așa:
Fie B[n:0] vectorul de biți în reprezentare binară obișnuită
Fie G[n:0] vectorul de biți în reprezentare binară Gray
G[n]=B[n]
pentru i=n-1 până la i=0 {
G[i]=B[i+1] XOR B[i]
}
sau în C:
unsigned int grayencode(unsigned int g) {
return(g^g>>1);
}
Decodarea ar fi:
B[n]=G[n]
pentru i=n-1 până la i=0 {
B[i]=B[i+1] XOR G[i]
}
sau în C:
unsigned int graydecode(unsigned int b) {
b^=b>>1; b^=b>>2; b^=b>>4; b^=b>>8; return(b^b>>16);
}