論理演算のXORを実現する


AS3ではビット単位でのXORはできるけど(^)、論理演算でのXORは用意されていないようなので、何とかできるように工夫してみた。

普通に

if(isA ^ isB){
//XORでtrueの処理
}

という感じで書くこともできるかと思ったら、数値型でないとパブリッシュできません。というわけで、

if(int(isA) ^ int(isB)){
//XORでtrueの処理
}

のような感じにしたらできました。一応traceさせると、

trace(Boolean(int(true) ^ int(true)));//false
trace(Boolean(int(true) ^ int(false)));//true
trace(Boolean(int(false) ^ int(true)));//true
trace(Boolean(int(false) ^ int(false)));//false

ということでXORが実現できました。まあビット単位の演算はできる以上当たり前ですし、遅くなったりしないのかという疑問も残りますが、条件文2つ書くよりはいいかなと。

計算もビット演算使った方が早い場合もあるようなので、ビット演算についてはもうちょっと使えるようにしたい。ビットシフトとか。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です