Есть XNOR (логическое двойное условие) оператор в C#?


Я новичок в C# и не могу найти XNOR оператор для предоставления этой таблицы истинности:

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

есть ли конкретный оператор для этого? Или мне нужно использовать !(A^B)?

4 108

4 ответа:

XNOR-это просто равенство булевых значений; используйте A == B.

это легко пропустить, так как равенство обычно не применяется к булевым значениям. И есть языки, где это не обязательно работать. Например, в C любое ненулевое скалярное значение рассматривается как true, поэтому два "истинных" значения могут быть неравными. Но вопрос был помечен c#, который имеет, скажем так, хорошие булевы.

обратите внимание также, что это не обобщает на побитовые операции, куда хочешь 0x1234 XNOR 0x5678 == 0xFFFFBBB3 (предполагая, что 32 бита). Для этого вам нужно построить из других операций, таких как ~(A^B). (Примечание:~, а не !.)

XOR = A или B, но не A & 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), но второй вернет true (a[value?] и B[значение?] 's значения возвращают то же логическое значение true (value = не 0/есть значение)

пример alt-это просто обратный (a / / b) && !(a && b) (XOR) ворота

нет, вы должны использовать !(A^B)

хотя я полагаю, что вы могли бы использовать перегрузку оператора, чтобы сделать свой собственный XNOR.

можно использовать === оператор для XNOR. Просто вам нужно конвертировать a и b в bool.

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