Я новичок в С# и не смог найти оператор XNOR, чтобы предоставить эту таблицу истинности:
a b a XNOR b ---------------- T T T T F F F T F F F T
Существует ли для этого конкретный оператор? Или мне нужно использовать! (A ^ B)?
Я новичок в С# и не смог найти оператор XNOR, чтобы предоставить эту таблицу истинности:
a b a XNOR b ---------------- T T T T F F F T F F F T
Существует ли для этого конкретный оператор? Или мне нужно использовать! (A ^ B)?
XNOR - это просто равенство по булевым; используйте A == B
.
Это легко пропустить, так как равенство обычно не применяется к булевым. И есть языки, где это не обязательно будет работать. Например, в C любое ненулевое скалярное значение считается истинным, поэтому два "истинных" значения могут быть неравными. Но вопрос был помечен С#, который, скажем так, корректные булевы.
Обратите также внимание, что это не обобщает на побитовые операции, где вы хотите 0x1234 XNOR 0x5678 == 0xFFFFBBB3
(предполагая 32 бита). Для этого вам нужно построить из других операций, например ~(A^B)
. (Примечание: ~
, а не !
.)
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
Нет, вам нужно использовать !(A^B)
Хотя я полагаю, вы могли бы использовать перегрузку оператора, чтобы создать свой собственный XNOR.
Вы можете использовать оператор ===
для XNOR.
Просто вам нужно преобразовать a
и b
в bool.
if (!!a === !!b) {...}