CにXOR論理演算子があるかどうか疑問に思っていました(ANDの&&のようなものですが、XORの場合)。XOR を AND、NOT、OR に分割できることはわかっていますが、単純な XOR の方がはるかに優れています。次に、2 つの条件の間で通常の XOR ビット単位演算子を使用すると、うまくいく可能性があることに気付きました。そして、私のテストではそうでした。
検討:
int i = 3;
int j = 7;
int k = 8;
このややばかげた例のために、kがiよりも大きいかjよりも大きい必要があるが、両方ではない必要がある場合、XOR は非常に便利です。
if ((k > i) XOR (k > j))
printf("Valid");
else
printf("Invalid");
また
printf("%s",((k > i) XOR (k > j)) ? "Valid" : "Invalid");
ビット単位の XOR ^を入れると、 「無効」が生成されました。2 つの比較の結果を 2 つの整数に入れると、2 つの整数に 1 が含まれるため、XOR は false を生成します。& と | で試してみました。ビット単位の演算子と両方が期待される結果をもたらしました。真の条件はゼロ以外の値を持ち、偽の条件はゼロの値を持つことを知っていれば、これはすべて理にかなっています。
論理的な && と || を使用する理由はあるのでしょうか。ビット演算子 &, | そして^同じように動作しますか?