2011-08-14 26 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中,任何非零標量值都被視爲真,因此兩個「真」值可能不相等。但是這個問題被標記爲,我們應該說,這是乖巧的布爾值。

還要注意,這並沒有推廣到按位操作,你想要0x1234 XNOR 0x5678 == 0xFFFFBBB3(假設32位)。爲此,您需要從其他操作構建,如~(A^B)。 (注意:~,不!

+33

當然是!我現在覺得自己很愚蠢 - ) – trailmax

+3

@trailmax:不需要感到愚蠢,這很容易錯過。 (清理併入到答案中的註釋。) –

+4

在C中,可以使用'!'運算符將'int'轉換爲「良好行爲」的布爾值:'!a ==!b'。 –

2

沒有,您需要使用!(A^B)

雖然我想你可以使用運算符重載,使自己的XNOR。

+1

這是按位,而不是邏輯 – sll

+0

我認爲海報知道,因爲他包括在他的問題。 – Griffin

+4

@sllev你幾乎讓我,我不得不再次檢查它。在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)){ 
... 
} 

第一示例將返回假(5!= 1),但第二個將返回true(a [value?]和b [value?]的值返回相同的布爾值,真(值=不是0 /有一個值)

alt示例只是反轉(a || B)& &!(一& & B)(XOR)門

-3

可以使用===運營商XNOR。 只需要將ab轉換爲bool即可。

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

只有C#沒有'==='運算符 – trailmax

+0

這個答案沒有一個是正確的,'==='非強制性運算符是javascript和雙重'!!'在評估中的值在c#中無效之前如前所述 – Remi

+0

,c#沒有三重等號運算符。 – cramopy