It's our wits that make us men.

位运算(转载)

Posted on By eatMelon-Masses

#位运算符

   与(&) 或(|) 非(~) 异或(^)
   >> 和 << 运算符将二进制位进行右移或者左移操作
   >>> 运算符将用0填充高位; >> 运算符用符号为填充高位,没有<< 运算符

位运算技巧

  1. 判断奇偶数

    x & 1

  2. 获取二进制第n位是0还是1

    x » n * 1

  3. 交换两个整数变量的值
         int a = 1;
         int b = 2;
         a = a ^ b;
         b = a ^ b;
         a = a ^ b;
    
  4. 不用判断语句,求整数的绝对值

    num * (1 - ( (num » 32) « 1))

异或性质

异或是不进位加法 1 ^ 1 = 0; 1 ^ 0 = 1; 0 ^ 1 = 0; 0 ^ 0 = 0; 性质:

  1. 交换律可以任意交换因子位置,而结果不变
  2. 结合律:(a^b)^ b = a ^ (b ^ b)
  3. 对任何数x都存在,x ^ 0 = x; x ^ x = 0;
  4. 自反性,A ^ b ^ b = A ^ 0 = A