system
Răspunde în limba română, în stilul Wikipedia, cat mai corect gramatical.
user
Ce informații relevante ai despre Cod Gray?
assistant
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);
  }

Logică binară
Coduri