T10. Bit Manipulation
关于 >> 和 >>> 的区别:
>>如果是负数,最高位填充1>>>不管正的负的,最高位都填充0
位运算奇技淫巧:
关于位取反运算:~x 等价于 (-x) - 1。于是 A - B 可以写成:A + ~B + 1。
还有,x & (x-1) 可以判断 x 是否是 2 的幂。神奇吧?比 popcount() 快!
还有,两个数相加,可以写成:
java
public int addition(int a, int b) {
if (b == 0) return a;
int sum = a ^ b;
int carry = (a & b) << 1;
return addtion(sum, carry);
}
// 神奇吧?