La fórmula para calcular el enésimo código gris es:
(n-1) XOR (floor((n-1)/2))
(Source: wikipedia)
Lo codifiqué como:
int gray(int n)
{
n--;
return n ^ (n >> 1);
}
¿Alguien puede explicar cómo funciona la fórmula anterior, o posiblemente su derivación?