交換の異種または実現

704 ワード

1.概要
aとbの値を交換したい場合は、一時変数tempを宣言してから交換を実現するのが一般的です.
 
そうすべきだったが、今日「コンピュータシステムを深く理解する」という本を読んだとき、3番目の位置が来たときに記憶する必要がなく、もう一つの巧みな実現方法を発見した.
 
ビット操作(異或)だけでいいです.
 
2.異或
定義:
 
a^b=a'b+ab'(a'は非a)
 
1^1 = 0;
0^0 = 0;
1^0 = 1;
0^1 = 1;
 
ルール:
 
a ^ a = 0;
a ^ 0 = a;
a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
 
推論:
 
(a^b)^b = a^(b^b) = a;
 
3. code
// C    
void swap(int *x, int *y)
{
    *x = *x ^ *y;
    *y = *x ^ *y;
    *x = *x ^ *y;
}

4.結論
性能的には大きな優位性はありませんが、この方法は考えを広げましたが、柳暗花明又一村の感じを与えてくれました.