Number.toGrayCode = function(n) { if (n < 0) { throw new RangeError("cannot convert negative numbers to gray code"); } return n ^ (n >>> 1); }; Number.fromGrayCode = function(gn) { if (gn < 0) { throw new RangeError("gray code numbers cannot be negative"); } var mask; for (mask = gn >> 1; mask != 0; mask = mask >> 1) { gn ^= mask; } return gn; };