天天看點

位運算

位運算符

含義 運算符 說明 示例
左移 << 相當于十進制的*2 0011=>0110(3*2=6)
右移 >> 相當于十進制的//2 0110=>0011(6//2=3)
按位或 | 有一位為1則為1

0 0 1 1

1 0 1 1

按位與 & 兩位都為1才為1
按位取反 ~ 1 1 0 0
按位異或 ^ 相同為0 不同為1 1 0 0 0

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