---
tags: C++, C
---
# [C++] (邏輯)運算子的妙用
## 總結
### 儲存(No Change)
要先歸零才能存
* 0|A -> A
* 0^A -> A
### 取反(Not, binary, 互補數)
* !A
* 1^A
### 相等(Equal)
* A^A = 0
* A^B $\geq$ 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 別人 $\geq$ 1
* 例題:
1. 檢查回文當中的落單碼(或錯誤碼):
令 s = "CBAXABC"
```python=
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 自己 => 自己