silentmatt
6/26/2009 - 5:10 PM

JavaScript functions to convert to/from binary-reflected Gray codes

JavaScript functions to convert to/from binary-reflected Gray codes

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 g = gn.toString(2).split("");
    var b = [];
    b[0] = g[0];
    for (var i = 1; i < g.length; i++) {
        b[i] = g[i] ^ b[i - 1];
    }

    return parseInt(b.join(""), 2);
};