Panda Noir

JavaScript の限界を究めるブログです。

排他的論理和2回の欠点

排他的論理和を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はグローバル変数です。