這篇想記錄一下關於 XOR 位元運算子
為什麼想紀錄呢?
有次在刷題時看到一個神奇的解法,非常優雅又快速,反觀自己的解法真的是基本到不行,從來沒想過可以利用 XOR,今天就給它一個版面好好的認識!
位元運算子有四種,分別為 &
、|
、^
、~
,其定義如下
運算子 | 定義 | 描述 |
---|---|---|
& | AND(且) | 當兩者為 true 時,結果為 true |
| | OR(或) | 當兩者其一為 true 時,結果為 true |
^ | XOR(互斥OR) | 當兩者皆為 true 或 false 時,結果為 true |
~ | NOT(非) | 反轉位元 |
上表在使用前會先轉換成位元(即二進位制)再進行運算
那麼 XOR 的特性是什麼呢?
當條件一與條件二成立時,會回傳 false
條件 A | 條件 B | result |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
不習慣看 0 1 的朋友,可以參考下表
條件 A | 條件 B | result |
---|---|---|
true | true | false |
true | false | true |
false | true | true |
false | false | false |
使用方式
Console.WriteLine(1 ^ 1); // output: False
Console.WriteLine(1 ^ 0); // output: True
Console.WriteLine(0 ^ 1); // output: True
Console.WriteLine(0 ^ 0); // output: False
Console.WriteLine(true ^ true); // output: False
Console.WriteLine(true ^ false); // output: True
Console.WriteLine(false ^ true); // output: True
Console.WriteLine(false ^ false); // output: False
了解基本概念後,小試身手一下,假設有兩數分別為 2 和 3,使用 XOR 運算子會得到的結果是什麼?
一開始先將十進制的數字轉換成二進制
2 → 010
3 → 011
接著對相同位數進行運算
個位 → 0 ^ 1 = 1
十位 → 1 ^ 1 = 0
百位 → 0 ^ 0 = 0
最後得到 001 也就是十進位的 1,神奇吧!
總結從 XOR 看到的東西
- A ^ 0 永遠是 A
- A ^ A 永遠是 A
所以當一數字 XOR 自己,絕對是 0,當一堆數字進行 XOR 運算,得到的結果會是落單的數字,例如: A ^ B ^ C ^ A ^ B,結果會是落單 C,收工!
Reference
Boolean logical operators (C# reference)
Thanks for reading the article 🌷 🌻 🌼
If you like it, please don't hesitate to click heart button ❤️
or follow my GitHub ⭐
or buy me a coffee ⬇️ I'd appreciate it.
Top comments (0)