func bin2gray(n) { n ^ (n >> 1); } func gray2bin(num) { var bin = num; while (num >>= 1) { bin ^= num }; return bin; } 0..31 -> each { |i| var gr = bin2gray(i); printf("%d\t%b\t%b\t%b\n", i, i, gr, gray2bin(gr)); }