2011-08-14 6 views
91

私はC#に新たなんだと、この真理値表を提供するために、XNOR演算子を見つけることができませんでした:C#にXNOR(論理バイコンディション)演算子がありますか?

 
a b a XNOR b 
---------------- 
T T  T 
T F  F 
F T  F 
F F  T 

は、このための具体的な作業はありますか?または、私は(A^B)を使用する必要がありますか?

+66

この演算子は、より一般的に '' ==ためのブールオペランドとして知られている... –

+0

@Magnus Hoff氏:素敵な非常に嬉しいポイント! – sll

+14

「木の木が見えない」というフレーズは、ここでは非常に適切だと思います。 )私たちは一度か二度ここにいたので投票する; – spender

答えて

169

XNORはブール値で単純に等価です。 A == Bを使用してください。

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

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

+33

もちろんです!私は今のように愚かな気がする - ) – trailmax

+3

@ trailmax:愚かな気分にする必要はなく、見逃しやすいのです。 –

+4

Cでは、 '!'演算子を使って 'int''を' well-behaved'ブール値に変換することができます: '!a ==!b'。 –

2

いいえ、あなたは私はあなたがあなた自身のXNORを作るために演算子オーバーロードを使用することができたとしますが!(A^B)

を使用する必要があります。

+1

これは論理的ではなく、論理的ではありません – sll

+0

私はポスターが自分の質問にそれを含めていることを知っていると思います。 – Griffin

+4

@sllevあなたはほとんど私を持って、私はそれを再度チェックしなければならなかった。booleanで操作すると、C#^は論理的です。整数型で操作する場合、ビット単位です。 http://msdn.microsoft.com/en-us/library/zkacc7k1.aspx – trailmax

4

XOR = AまたはBが、未& Bまたはどちらも(同じにすることはできません[=!])
XNORは、したがって、正確なoppoisteあり、かつ容易に行うことができ==または===で表されます。

しかしながら、非ブールの場合、この例のように存在する問題:代わり

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?]の値は同じbooleanを返します、true(値= 0でない/値があります)

altの例は逆です(a || B)& &!(& & B)(XOR)ゲート

-3

あなたはXNORため===演算子を使用することができます。 ちょうどabをboolに変換する必要があります。

if (!!a === !!b) {...} 
+0

C#には '==='演算子がありません – trailmax

+0

この回答はどれも正しくはありません。 '==='非強制的な演算子はjavascriptで、評価の値がC# – Remi

+0

既に述べたように、C#には3つの等号演算子がありません。 – cramopy