1、 2n - 1 等价的位移运算?
2n - 1 = -1 ^ (-1 << n) ,Java中即:Math.pow(2, n) - 1 = -1 ^ (-1 << n);
应用范例,twitter提出的获取分布式id的SnowFlake算法中多处使用。
2、x % 2n 等价的位运算?
x % 2n = x & (2n - 1) ,Java中即:x % Math.pow(2,5) == (x & (long)(Math.pow(2,5) -1));
应用范例,HashMap中采用此操作定位Key的对应的数组下标。
3、如何求负数二进制表示?
负数采用补码表示。补码 = 反码 + 1;
3的反码为(1100),则-3的二进制表示如下,
-3 = (1100) + (0001) = (1101) ;