ほとんどの場合、一時変数(通常はアセンブリレベルのレジスタ)を使用するのが最良の選択であり、コンパイラが生成する傾向があります。
ほとんどの実際的なシナリオでは、一時レジスタを使用する簡単なスワップアルゴリズムの方が効率的です。XORスワッピングが実用的である可能性のある限られた状況には、次のものがあります。命令セットのエンコードによってXORスワップをより少ないバイト数でエンコードできるプロセッサ。レジスタ圧力が高い領域では、レジスタアロケータがレジスタをこぼさないようにすることができます。利用可能なRAMが非常に限られているマイクロコントローラ。これらの状況はまれであるため、ほとんどの最適化コンパイラはXORスワップコードを生成しません。
http://en.wikipedia.org/wiki/XOR_swap_algorithm
また、同じ変数が両方の引数として渡された場合、XORスワップの実装は失敗します。(同じリンクからの)正しい実装は次のようになります。
void xorSwap (int *x, int *y) {
if (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
コードはすぐに渡された整数を交換しませんが、最初にそれらのアドレスが異なるかどうかをチェックすることに注意してください。これは、アドレスが等しい場合、アルゴリズムがトリプル* x ^ = * xにフォールドされ、結果がゼロになるためです。