Cod Gray
Aspect
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); }