--- 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 自己 => 自己