跳至頁尾內容
Iron Academy Logo
學習C#
學習C#

其他類別

理解C#中的二進制異或運算符

Tim Corey
5m 54s

二進位運算是程式設計的重要部分,特別是在處理低階優化和位元操作時。 其中一個運算是互斥或(XOR)運算符。 在本文中,我們將透過跟隨Tim Corey的影片"The Binary XOR Operator in 10 Minutes or Less"來探索C#的Binary XOR運算符。

Tim的影片是對XOR、其語法及其實際應用的絕佳解析。 在下面,我們將分析他的解釋和例子,同時參考具體的時間戳以便於參考。

XOR簡介

Tim在影片開頭提到這是他C#的Understanding Binary系列的一部分,特別是第九課。他透過解釋在本堂課將教授互斥或(XOR)運算符的工作原理以及在各種場景中的實用性來奠定基礎。

XOR運算符語法及基本解釋

Tim介紹了兩個值,1和2,並將它們列印到控制台以供參考。 他移除32位元表示,以便專注於標準的8位元二進位表示。

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

  • 與運算符(&)需要兩個位元都為1才能返回1。
  • 或運算符(|)如果至少有一個位元為1,則返回1。
  • XOR運算符(^)僅當兩個位元中的一個為1而非兩者時才返回1。

Tim進一步解釋每位點比較的規則:

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

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

在C#程式碼中展示XOR

Tim透過定義一個uint變數來進行實際範例,該變數持有兩個值的XOR運算結果:

// 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. val2值。

在7:30,Tim列印出交換後的值,確認val2成功交換了值。

瞭解二進位表示中的XOR

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

結論

Tim總結時重申核心要點:

  • XOR僅當恰好一個位元為1時返回1。
  • 它可以有效地比較值
  • 它有助於在不使用第三個變數的情況下交換兩個值,使得這在程式挑戰中成為一個實用技巧。

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

最後的想法

Tim Corey的影片對C#中XOR提供了絕佳且簡練的解析。 透過逐步範例,展示了該運算符在比較、差異以及甚至值交換中的用途。

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

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

分享您所愛以賺取更多報酬

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

Iron 支援團隊

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