IRONSOFTWAREHOME

C#の2進XOR演算子を理解する

C# のバイナリ: 10 分以内でバイナリ XOR 演算子を学ぶ

Tim Corey

5 分 54 秒

バイナリ操作はプログラミングの重要な要素であり、特に低レベルの最適化やビット単位の操作を扱う場合に重要です。 そのような操作の1つが排他的論理和(XOR)演算子です。 この記事では、ティム・コーリーのビデオ"The Binary XOR Operator in 10 Minutes or Less."に沿って、C#の2進XOR演算子について説明します。

ティムのビデオは、XOR、その構文、およびその実用的なアプリケーションの優れた内訳です。 以下では、簡単に参照できるように特定のタイムスタンプを参照しながら、彼の説明と例を分析します。

XORの紹介

ティムはビデオの冒頭で、これが"Understanding Binary in C#"シリーズ、特にレッスン番号9の一部であることに触れています。このセッションでは、排他的論理和(XOR)演算子がどのように機能し、さまざまなシナリオでどのように役立つかを説明します。

XOR演算子の構文と基本的な説明

Tim は 2 つの値、1と 2 を導入し、参照用にコンソールに出力します。 彼は、標準的な8ビットのバイナリ表現に焦点を当てるために、32ビット表現を削除しました。

0:31では、XORがC#ではキャレット記号(^)で表されることを説明している。 彼は視聴者に次のように注意を促しています:

  • AND演算子(&)は、両方のビットが1でなければ1を返しません。
  • OR演算子(|) は、ビットの少なくとも1つが1であれば1を返す。
  • XOR演算子(^)は、2つのビットの一方が1の場合のみ1を返しますが、両方は返しません。

ティムはさらに、各ビットの比較ルールを説明しています:

  • 1 排他的論理和 0 = 1
  • 0 排他的論理和 1 = 1
  • 1 排他的論理和 1 = 0
  • 0 排他的論理和 0 = 0

これは、XORが2つの値の間の差分検出器として機能することを意味します。

XORの実演: C#コード内

ティムは、2つの値を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'));

そして、結果をコンソールに出力し、出力をメモする:

0000 0011
Text

この出力は、XORが元の値の一方が1であるビットのみを保持し、両方は保持しないことを強調しています。

値の比較に XOR を使用する

ティムは、XORの実用的な使い方の1つ、2つの値が同じかどうかをチェックする方法を示します。

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

ティムは、XORの結果が0であることは、値が同一であることを意味すると説明しています。 これにより、XORは2つの数値が等しいかどうかを比較する迅速な方法となります。

相違を識別するための XOR

4:00 に、ティムはval2にわずかな違いがある別のケースを示します。 今回、XORはゼロ以外の結果を生成し、値の違いを示します。

XORは1ステップで差異を強調できるため、大きなバイナリ値を効率的に比較する場合にこのアプローチが有効です。

テンポラリ変数なしで 2 つの変数をスワップするための XOR

ティムは、古典的なプログラミングのトリックを紹介します。

5:40 に、彼は視聴者に追加の変数を宣言せずにval2を交換するよう挑戦させます。 このソリューションでは、XORを3回使用します:

// 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 に、ティムは交換された値を印刷し、val2がうまく値を交換したことを確認します。

バイナリ表現の XOR を理解する

理解を深めるために、ティムはスワッピング操作のバイナリ・バージョンを実行し、各XORステップがビットにどのような影響を与えるかを示します。 彼は、各ビットが必要なときだけ反転し、XORが値を交換する効率的な方法であることを強調しています。

結論

Tim氏は最後に、核となる要点を強調して締めくくりました:

  • XORは、ちょうど1つのビットが1のときだけ1を返します。
  • 値の比較を効率的に行うために使用できます。
  • これは、3つ目の変数なしで2つの値を入れ替えるのに役立ち、コーディングの課題において便利なトリックになります。

彼は、視聴者がXORを試し、実世界の問題に適用して、より深い理解を構築することを奨励している。

最終的な考え

ティム・コーリーのビデオでは、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にメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。