boolのXOR
なんでないんだろうと昔から不思議でしょうがなかった。
よく使う論理演算として、否定(NOT)・論理積(AND)・論理和(OR)・排他的論理和(XOR)がある。他にもいろいろあるらしいが少なくとも私は使ったことがないしよく知らないし必要ないし(ぉ
で、この4つの論理演算、C++で、ビット演算はそれぞれ専用の演算子が存在する。
unsigned int a = 0x0000FFFF; ~a; //0xFFFF0000 否定(NOT) a & 0x00FF00FF; //0x000000FF 論理積(AND) a | 0x00FF00FF; //0x00FFFFFF 論理和(OR) a ^ 0x00FF00FF; //0x00FFFF00 排他的論理和(XOR)
しかしなぜかboolに対しては排他的論理和だけ存在しない。
bool a,b; !a; //否定(NOT) a && b; //論理積(AND) a || b; //論理和(OR)
何気に排他的論理和は結構使うので不便でしょうがない。しょうがないからいつも以下のコードを書いていた。
( !a && b ) || ( a && !b );
上記は変数が一文字で済んでいるからいいものの、実際には不等式が入ったりしてかなり長くなる。ので大抵は一旦、不等式なりなんなりを一時変数に代入してそれを上記のようにif文に入れたりしている。面倒だし可読性悪いしいいことが何にもない。つくづく頭にきたりしたものだが、なんで実装されていないか今日気が付いた気がしました。
a != b;
これでいいんですよね。何年もC++書いてきたけど今まで全然気が付きませんでしたorz