ビット演算による2つの変数値の交換機能

ビット演算による2つの変数値の交換機能

一般的な交換方法

2 つの変数 a と b を交換する通常のプロセスは次のとおりです。

int temp;
temp=a
a=b;
b=temp;

上記の 3 番目の一時変数 temp を使用する必要があります。

ビット単位のスワップ方式

次の方法を使用すると、2 つの整数 a と b が与えられた場合、次の XOR 演算により、3 番目の一時変数に頼らずに a と b の交換を実現できます。

    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

3 番目の一時変数に頼らずに 2 つの変数を交換するこのプロセスは、主に XOR 演算の次のプロパティに基づいています。

  1. 変数 X はそれ自体と XOR 演算され、結果は 0、つまり X^X=0 になります。

  2. 変数 X は 0 と XOR 演算され、結果は変更されません。つまり、X^0=X となります。

  3. XOR 演算は結合的です。つまり、 a b c=(a b) c=a (b c)

  4. XOR 演算は互換性があります。つまり、a b=b a

ビット操作方法の分析:

  1. ステップ 1:a = a ^ b;完了後、変数 a の結果は次のようになります。a ^ b

  2. ステップ 2:b = a ^ b;
    このとき、代入番号の右側の a には a ^ b の値が格納されており、次に代入番号の右側の a を a ^ b に置き換え、2 番目のステップの演算後の b の
    (a^b)^b = a ^(b^b) = a^0 = a,
    a は a、つまり b = a、a を b に代入します

  3. ステップ 3:a = a ^ b;
    このとき、割り当て番号の右側の a の値は変更されa ^ bずに保存されますが、割り当て番号の右側の b はすでに a であり、割り当て番号の右側の a と b はそのまま保持されます。代入番号がそれぞれ置き換えられます。つまり、
    このときの代入番号の右側a^b =(a^b)^a = a^b^a = a^a^b = 0^b = b、値が a に代入されます。つまり、a=b
    3 番目のステップの操作の後、a の値は b、つまり a=b、そして b は a に置き換えられます。

このように、上記の3ステップにより、3番目の一時変数に頼ることなく、2つの変数a、bを交換する処理が完了する。

理解できない場合は、例を挙げて理解することができます。

おすすめ

転載: blog.csdn.net/qq_41704415/article/details/126036012