public class EncodeBits { public static int decode(long d) { int res = 0; for (int i = 0; i < 64; i++) { if ((d & (1L << i)) != 0) { res ^= i; } } return res; } public static long encode(long random, int val) { int current = decode(random); int change = current ^ val; return random ^ (1L << change); } }