C#に条件付きXOR
演算子がないのはなぜですか?
例:
true xor false = true
true xor true = false
false xor false = false
C#では、条件演算子は、必要な場合にのみセカンダリオペランドを実行します。
XOR mustは定義により両方の値をテストするため、条件付きバージョンはばかげているでしょう。
例:
論理AND:&
-毎回両側をテストします。
論理OR:|
-毎回両側をテストします。
条件付きAND:&&
-1番目の側が真の場合にのみ2番目の側をテストします。
条件付きOR:||
-1番目の側がfalseの場合にのみ2番目の側をテストします。
質問は少し時代遅れですが、...
この演算子の仕組みは次のとおりです。
true xor false = true
true xor true = false
false xor false = false
これは!=演算子がbool型でどのように機能するかです:
(true != false) // true
(true != true) // false
(false != false) // false
したがって、存在しない^^
は既存の!=
に置き換えることができます
明確にするために、^演算子は整数型とブールの両方で機能します。
MSDNの^演算子(C#リファレンス) を参照してください:
バイナリ^演算子は、整数型およびブールに対して事前定義されています。整数型の場合、^はオペランドのビットごとの排他的論理和を計算します。 boolオペランドの場合、^はそのオペランドの排他的論理和を計算します。つまり、オペランドの1つが真である場合にのみ、結果が真になります。
この質問が行われた2011年以降、ドキュメントが変更された可能性があります。
ああ、そうだ。
bool b1 = true;
bool b2 = false;
bool XOR = b1 ^ b2;
条件付きxorは存在しませんが、xorはブール値に対して定義されており、すべての条件付き比較はブール値に評価されるため、論理値を使用できます。
したがって、次のように言うことができます。
if ( (a == b) ^ (c == d))
{
}
論理 xor演算子^
、条件付き xor演算子はありません。以下を使用して、2つの値AおよびBの条件付きxorを実現できます。
A ? (!B) : B
括弧は必要ありませんが、わかりやすくするために追加しました。
The Evil Greeboが指摘したように、これは両方の式を評価しますが、xorはandやorのように短絡することはできません。
使用できます:
a = b ^ c;
c/c ++のように
条件付き(短絡)XORなどはありません。条件演算子は、最初の引数のみを調べて最終結果を明確に伝える方法がある場合にのみ意味があります。 XOR(および加算)は常に2つの引数を必要とするため、最初の引数の後に短絡する方法はありません。
A = trueがわかっている場合、(A XOR B)=!B。
A = falseがわかっている場合、(A XOR B)= B.
どちらの場合でも、Aを知っているがBを知らない場合は、知るだけの十分な知識がありません(A XOR B)。両方の値なしでXORを解決できるユースケースは文字通りありません。
XOR定義により、4つのケースがあります:
false xor true = true
true xor false = true
true xor true = false
false xor false = false
繰り返しますが、最初の値を知っていても、2番目の値を知らなくても答えを得るのに十分ではないことは、上記から明らかです。ただし、質問では、最初のケースを省略しました。代わりにしたい場合
false op true = false (or DontCare)
true op false = true
true op true = false
false op false = false
それからあなたは実際に短絡条件付き操作によってそれを得ることができます:
A && !B
しかし、それはXORではありません。