C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でビット演算XORを使って1行で2つの変数を入れ替える方法

C#では、ビットごとのXOR演算子(^)を活用することで、一時変数を使わずにたった1行のコードで2つの変数の値を入れ替えることができます。

1行で変数を交換するコード

val1 = val1 ^ val2 ^ (val2 = val1);

この式は、C#の評価順序(左から右へ評価される特性)を利用したテクニックです。まず val2 = val1 の代入が行われ、その結果と元の値をXORで組み合わせることで、両方の変数が同時に交換されます。

サンプルプログラム

以下は、初期値として val1 = 30val2 = 60 を設定し、1行のコードで2つの変数を入れ替える完全なC#のサンプルです。

Example

using System;

class Demo {

    public static void Main(String[] args) {
        int val1 = 30;
        int val2 = 60;

        Console.WriteLine("Values before swap");
        Console.WriteLine(val1);
        Console.WriteLine(val2);

        val1 = val1 ^ val2 ^ (val2 = val1);

        Console.WriteLine("Values after swap");
        Console.WriteLine(val1);
        Console.WriteLine(val2);
    }
}

出力結果

Values before swap
30
60
Values after swap
60
30

解説

XOR演算には「同じ値同士のXORは0になる」「任意の値と0のXORは元の値のまま」という性質があります。この性質を利用することで、従来のように第3の一時変数(temp)を用意する必要がなくなり、メモリの節約にもつながります。

ただし、この手法は可読性がやや低いため、実際のプロダクションコードでは一時変数を使った標準的な交換方法やタプルを使った (val1, val2) = (val2, val1); の方が推奨される場合もあります。状況に応じて使い分けると良いでしょう。

  1. 【Python】Tkinterでマウスの2回のクリック間に線を描画する方法

    マウスボタンでウィンドウをクリックすると座標を記録し、指定した2点間に線を描画する――そんなGUIアプリケーションの作成を考えてみましょう。Tkinterには、キーやマウスボタンの操作と関数をバインド(紐付け)できるイベント機構が用意されているため、比較的簡単に実装できます。 2点間に線を描画する基本の手順 キャンバスウィジェットの作成: 線を描画する領域となるキャンバスを作成し、ウィンドウ内に配置します。 イベントハンドラの定義: ユーザーがクリックしたときに実行される draw_line() 関数を定義します。 クリック回数の管理: キャンバス上のクリック回数をカウントするグローバル変数

  2. Pythonで2つの変数の値を交換する方法【一時変数あり・なしの2パターン】

    はじめにプログラミングにおいて、2つの変数が持つ値を入れ替える「スワップ(交換)」処理は非常によく使われる基本操作です。この記事では、Pythonで変数を交換する2つの方法を、実際のコード例とともにわかりやすく解説します。方法1:一時変数を使う方法最も古典的で汎用的なのが、もう1つの一時変数(テンポラリ変数)を介して値を入れ替える方法です。他の多くのプログラミング言語でも同様の手法が使われます。>>> x = 10>>> y = 20>>> z = x # x の値を一時変数 z に退避>>> x = y # y