int graycode(int in) {
int out = in & 0xFFFF;
for (int i=0; i<16; i++) {
// if certain bit is 1 then rest of bits get flipped else no change.
if (out & (0x8000 >> i)) {
out ^= (0xFFFF >> (i+1));
}
}
return out;
}