Try   HackMD

[C++] (邏輯)運算子的妙用

總結

儲存(No Change)

要先歸零才能存

  • 0|A -> A
  • 0^A -> A

取反(Not, binary, 互補數)

  • !A
  • 1^A

相等(Equal)

  • A^A = 0
  • A^B
    1

歸零(Reset to zeros)

  • A&0 = 0
  • A^A = 0

全設為一(Reset to ones)

  • A|1 = 1
  • A^(!A) = 1

判斷奇偶

  • 偶數&1=0
  • 奇數&1=1

XOR ^

Storage Register Operator Tamparary Register Result (Storage Register)
Zeros XOR A A
A XOR A Zeros
Ones XOR A not(A)
A XOR not(A) Ones
  • 儲存: 0 XOR 任意值,可儲存該任意值
  • 取反: 1 XOR 任意值,得到二進值取反 (同 NOT)
  • 歸零: (某值)自己 XOR (某值)自己,結果全零
  • (一)填滿: 自己 XOR 相反的自己,結果全一
  • 相等為0: 自己 XOR 自己 = 0
  • 不相等>0: 自己 XOR 別人
    1
  • 例題:
    1. 檢查回文當中的落單碼(或錯誤碼):
      令 s = "CBAXABC"
      ​​​​​​​​string s = "CBAXABC"; ​​​​​​​​char x = 0; // ascii 0 = NULL ​​​​​​​​for(char c:s){ ​​​​​​​​ x = x^c; ​​​​​​​​} ​​​​​​​​// 最終 x 會等於 X ​​​​​​​​// 因為其他字元可以成雙成對相消 ​​​​​​​​// 剩下 Zero XOR X -> X

AND &

  • 任意數 AND 0 => 歸零
  • 任意數 AND 1 => 偶數為0,奇數為1
    • 偶數 AND 1 => 0
    • 奇數 AND 1 => 1
  • 自己 AND 自己 => 自己

OR |

  • 任意數 OR 0 => 自己
  • 任意數 OR 1 => 填滿1的結果
  • 自己 OR 自己 => 自己