web-dev-qa-db-ja.com

C#にXNOR(論理二条件)演算子はありますか?

私はC#が初めてなので、この真理値表を提供する [〜#〜] xnor [〜#〜] 演算子が見つかりませんでした。

 aba XNOR b 
 ---------------- 
 TTT 
 TFF 
 FTF 
 FFT 

これに特定の演算子はありますか?または、!(A ^ B)を使用する必要がありますか?

122
trailmax

XNORはブール値の単なる平等です。 _A == B_を使用します。

平等は一般的にブール値に適用されないため、これは見落としやすいものです。また、必ずしも機能しない言語もあります。たとえば、Cでは、ゼロ以外のスカラー値はすべてtrueとして扱われるため、2つの「true」値が等しくない可能性があります。しかし、質問には c# というタグが付けられました。これは、行儀の良いブール値を持っています。

また、これは_0x1234 XNOR 0x5678 == 0xFFFFBBB3_(32ビットと仮定)が必要なビット単位の演算に一般化されないことに注意してください。そのためには、~(A^B)のような他の操作から構築する必要があります。 (注:_~_ではなく、_!_。)

228
Keith Thompson

XOR = AまたはB、ただしA&Bでない、またはどちらでもない(等しくない[!=])
XNORは正確な反対であり、==または===で簡単に表すことができます。

ただし、次の例のように、非ブール型の場合には問題が発生します。

a = 5
b = 1

if (a == b){
...
}

代わりに、これを使用します:

a = 5
b = 1

if((a && b) || (!a && !b)){
...
}

または

if(!(a || b) && (a && b)){
...
}

最初の例はfalse(5!= 1)を返しますが、2番目の例はtrueを返します(a [value?]およびb [value?]の値は同じブール値trueを返します(value = not 0 /値があります) )

altの例は、単に逆(a || b)&&!(a && b)(XOR)ゲートです

4
Braden Best

いいえ、!(A^B)を使用する必要があります

ただし、演​​算子のオーバーロードを使用して独自のXNORを作成できると思います。

2
Griffin