位运算

位运算符

含义 运算符 说明 示例
左移 << 相当于十进制的*2 0011=>0110(3*2=6)
右移 >> 相当于十进制的//2 0110=>0011(6//2=3)
按位或 | 有一位为1则为1

0 0 1 1

1 0 1 1

1 0 1 1

按位与 & 两位都为1才为1

0 0 1 1

1 0 1 1

0 0 1 1

按位取反 ~  

0 0 1 1

1 1 0 0

按位异或 ^ 相同为0 不同为1

0 0 1 1

1 0 0 0

1 0 1 1

XOR-异或

相同为0,不同为1。

异或的四大定律

  • 恒等率
  • 归零率
  • 交换律
  • 集合率

恒等率

一个数和0做XOR运算等于本身

a⊕0 = a

归零率

一个数和其本身做XOR运算等于0

a⊕a = 0

交换率和结合率一起使用

a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b

实战常用技巧 

判断奇偶性

  • x % 2 == 1 --> (x & 1) == 1
  • x % 2 == 0 --> (x & 1) == 0

取两个数的平均值(二分常用)

  • mid = (left + right) // 2 --> (left + right) >> 1

把最低位的1 置为0

  • x & (x - 1)

得到最低位的1

  • x & - x

x & ~x => 0

原文地址:https://www.cnblogs.com/Xuuuuuu/p/14317268.html