跳转至

T10. Bit Manipulation

关于 >>>>> 的区别:

  • >> 如果是负数,最高位填充 1
  • >>> 不管正的负的,最高位都填充 0

位运算奇技淫巧:

关于位取反运算:~x 等价于 (-x) - 1。于是 A - B 可以写成:A + ~B + 1

还有,x & (x-1) 可以判断 x 是否是 2 的幂。神奇吧?比 popcount() 快!

还有,两个数相加,可以写成:

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);
}
// 神奇吧?