IRONSOFTWAREHOME

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

Binary in C#: Binary XOR Operator in 10 minutes or less

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'));

然後他將結果列印到控制台並註明輸出:

0000 0011
Text

此輸出突顯了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'));

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

0000 0000
Text

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}");

他演示了過程:

  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#二進位操作的理解。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

OR
bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立