位运算

直接在二进制位上进行操作,主要用于程序的优化,加速。

  1. 判断奇偶。
    if(num & 1)//相当于if(num % 2 == 1)
    if(!(num & 1))//相当于if(num % 2 == 0)
  2. 乘除2的幂。
    num << n;//相当于num * 2^n(2的n次方)
    num >> n;//相当于num / 2^n(2的n次方)
  3. 交换两个数的值。
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
  4. 正负转换。
    num = ~ num + 1;//相当于num = -num
    num = (num ^ -1) + 1;//相当于num = -num
  5. 取余2的倍数。
    result = num & (n - 1);//相当于result = num % n(n为2的倍数)
  6. 取绝对值。
    x = (num ^ (num >> 31)) - (num >> 31);//相当于x = num < 0 ? -num : num;
    x = num ^ (~ (num >> 31) + 1)+(num >> 31);//相当于x = num < 0 ? -num : num;
  7. 判断两数符号是否相同。
    if(a ^ b > 0);//相当于if(a * b > 0)
  8. 判断是否是2的正整数幂。
    if((!(n & (n - 1)) ) && n == 1)//是的话为真
  9. 求两个数平均值。
     ((x ^ y) >> 1) + (x & y);//相当于(x + y) / 2
  10. 两个数最大最小值。
    result = y ^ ((x ^ y) & -(x < y));//x,y中的较小值
    result = x ^ ((x ^ y) & -(x < y));//x,y中的较大值