Proved the math teacher wrong.
public class Graycode { public static int normalToGray(int orig) { int gray = 0; for (int n = 0; n < 31; n++) gray |= (((orig + (1 << n)) >> (n + 1)) & 1) << n; return gray; } public static int grayToNormal(int gray) { int parity = 0; int norm = 0; for (int pos = 31; pos >= 0; pos--) norm = (norm << 1) | (parity ^= ((gray >> pos) & 1)); return norm; } public static int changedBitInNextGrayCode(int gray) { for (int i = 0; i < 31; i++) if (parity(gray >> i) == 0) return i + 1; return -1; } private static int parity(int v) { int c = 0; for (int i = 0; i < 31; i++) c ^= (v & (1 << i)) >> i; return c; } }
No comments:
Post a Comment