排他的論理和を2回繰り返すことに欠点があると前回書きました。 今回はその理由のつづきです。
排他的論理和AとBが同じ場合、返ってくる値は0となります。 理由は、前回書いた式に代入すればわかります。
^(a^b+^ab)b+(a^b+^ab)^b これでb=aとおくと、 ^(a^a+^aa)a+(a^a+^aa)^a=^(0+0)a+(0+0)^a =0(a+^a)=0(0)=0となります。
AとBが同じ場合、0となるとわかりました。 だから、排他的論理和で入れ替えを使う場合、aとbが同じかどうか判定する必要があります。
Javascriptのコードで書くと
function swipe(a,b){ if(a!=b){ a^=b; b^=a; a^=b; } }
他の言語でもできると思います。 ※この場合はa,bはグローバル変数です。