DEV Community

Cover image for C# - Logical XOR Operators (^)
FakeStandard
FakeStandard

Posted on • Edited on

C# - Logical XOR Operators (^)

這篇想記錄一下關於 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
Enter fullscreen mode Exit fullscreen mode

了解基本概念後,小試身手一下,假設有兩數分別為 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 ⭐ I'd appreciate it.


Top comments (0)