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

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

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

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

Ответ 1

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

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

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

Ответ 2

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), но второй вернет true (значения [value?] и b [value?] возвращают одинаковые логические значения, true (value = not 0/). значение)

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

Ответ 3

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

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

Ответ 4

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

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