跳過到頁腳內容
Iron Academy Logo
學習 C#
學習 C#

其他分類

理解 C# 中的二進制 XOR 運算

Tim Corey
5m 54s

二進位運算是程式設計中的重要部分,尤其是在低階優化和位元操作時。 其中一種運算是異或(XOR)運算子。 在本文中,我們將透過Tim Corey的影片來探索C#的二進位異或運算子,"十分鐘內快速了解異或運算子"。

Tim的影片對於異或運算子及其語法和實際應用進行了出色的分析。 在下文中,我們將分析他的解釋和例子,同時參考具體的時間戳以便於參考。

介紹XOR

Tim在影片一開始提到,這是他對C#二進位的理解系列的第九課。他建立場景説明在這一節中,他將教授如何運作異或(XOR)運算子,以及它在不同情況下的用途。

XOR運算子的語法和基本説明

Tim引入了兩個值,1和2,並將它們打印到控制台以供参考。 他移除了32位的表示方式,以保持集中於標準的8位二進位表示。

在0:31,他解釋說XOR在C#中由插入符號(^)表示。 他提醒觀眾:

  • AND運算子(&)要求兩個位元都為1才能返回1。
  • OR運算子(|)如果至少有一位元為1則返回1。
  • XOR運算子(^)僅當其中一個位元為1且不全為1時才返回1。

Tim進一步説明每個位元比較的規則:

  • 1 XOR 0 = 1
  • 0 XOR 1 = 1
  • 1 XOR 1 = 0
  • 0 XOR 0 = 0

這意味著XOR充當了兩個值之間的差異檢測器

在C#代碼中展示XOR

Tim通過定義一個包含兩個值的XOR結果的uint變數來進入實際示例:

// Define two sample values
uint val1 = 0b0001;  // 1 in decimal
uint val2 = 0b0010;  // 2 in decimal

// Perform XOR operation between val1 and val2
uint result = val1 ^ val2;

// Print the resultant binary value of XOR operation
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));
// Define two sample values
uint val1 = 0b0001;  // 1 in decimal
uint val2 = 0b0010;  // 2 in decimal

// Perform XOR operation between val1 and val2
uint result = val1 ^ val2;

// Print the resultant binary value of XOR operation
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));

然後他將結果打印到控制台並記錄輸出:

0000 0011

這一輸出顯示XOR僅保留了原始值中一個具有1的位置,而不是兩者。

使用XOR進行值比較

Tim現在展示XOR的一個實際用途:檢查兩個值是否相同。

在3:00,他修改了值,使val2完全相同:

// Initialize val1 and val2 to the same value
uint val1 = 0b10011001;
uint val2 = 0b10011001;

// Perform XOR operation to check for identical values
uint result = val1 ^ val2;

// Output will be zero if both values are identical
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));
// Initialize val1 and val2 to the same value
uint val1 = 0b10011001;
uint val2 = 0b10011001;

// Perform XOR operation to check for identical values
uint result = val1 ^ val2;

// Output will be zero if both values are identical
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));

當他執行XOR運算時,結果為:

0000 0000

Tim解釋說,XOR結果為0意味著這些值是相同的。 這使得XOR成為比較兩個數字是否相等的一種快速方法。

XOR用於識別差異

在4:00,Tim展示了val2略有不同的情況。 這次,XOR產生了非零結果,表示值之間存在差異。

這一方法在效能比較大二進位值時非常有用,因為XOR可以在一步中突出差異。

XOR用於無須臨時變數交換兩個變數

Tim展示了一個經典的程式設計技巧:在不使用臨時變數的情況下交換兩個數字。

在5:40,他挑戰觀眾進行交換val2而不聲明額外變數。 解決方案使用XOR三次:

// Original values
uint val1 = 0b0010; // 2 in decimal
uint val2 = 0b0100; // 4 in decimal

// Swap the values using XOR
val1 = val1 ^ val2;
val2 = val1 ^ val2;
val1 = val1 ^ val2;

// After swap: val1 = 4, val2 = 2
Console.WriteLine($"val1: {val1}, val2: {val2}");
// Original values
uint val1 = 0b0010; // 2 in decimal
uint val2 = 0b0100; // 4 in decimal

// Swap the values using XOR
val1 = val1 ^ val2;
val2 = val1 ^ val2;
val1 = val1 ^ val2;

// After swap: val1 = 4, val2 = 2
Console.WriteLine($"val1: {val1}, val2: {val2}");

他走過這個過程:

  1. val1 ^ val2,這意味著它現在持有兩個值的混合。
  2. 在再次與val1值。
  3. 再次進行XOR,val2值。

在7:30,Tim打印了交換後的值,並確認val2成功地交換了值。

理解XOR的二進位表示

為了鞏固理解,Tim運行了一個二進位版本的交換操作,展示每一個XOR步驟如何影響位元。 他指出每個位元僅在必要時翻轉,使得XOR成為一種高效的值交換方法。

結論

Tim總結通過強化核心重點:

  • XOR返回1僅當只有一個位元為1
  • 它可以有效地用於比較值
  • 它幫助在不使用第三個變數的情況下交換兩個值,使其成為編程挑戰中的一個方便技巧。

他鼓勵觀眾嘗試使用XOR並將其應用於實際問題以建立更深的理解。

最終想法

Tim Corey的影片在C#中對XOR運算進行了出色而簡明的分析。 通過逐步示範例子,他展示了運算子的用處於比較、差異,甚至值交換。

如果您對二進位運算或位元技巧感興趣,這是一個必看影片可以加強您對C#二進位操作的理解。

Hero Worlddot related to 理解 C# 中的二進制 XOR 運算
Hero Affiliate related to 理解 C# 中的二進制 XOR 運算

通過分享您所愛的東西賺得更多

您是否在為使用.NET、C#、Java、Python或Node.js的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我