Я новичок в C# и не смог найти оператор XNOR для предоставления этой таблицы истинности:
a b a XNOR b ---------------- T T T T F F F T F F F T
Есть ли специальный оператор для этого? Или мне нужно использовать !(A^B)?
Я новичок в C# и не смог найти оператор XNOR для предоставления этой таблицы истинности:
a b a XNOR b ---------------- T T T T F F F T F F F T
Есть ли специальный оператор для этого? Или мне нужно использовать !(A^B)?
XNOR — это просто равенство логических значений; используйте 1_.
Это легко пропустить, поскольку равенство обычно не применяется к логическим значениям. И есть языки, где это не обязательно будет работать. Например, в C любое ненулевое скалярное значение считается истинным, поэтому два «истинных» значения могут быть неравными. Но вопрос был отмечен тегом c#, что , скажем так, хорошо управляемые булевы значения.
Также обратите внимание, что это не распространяется на побитовые операции, где вы хотите 0x1234 XNOR 0x5678 == 0xFFFFBBB3
(при условии, что 32 бита). Для этого вам нужно строить из других операций, таких как ~(A^B)
. (Примечание: ~
, а не !
.)
!
можно использовать для преобразования int
в корректные логические значения: !a==!b
.
- person ivan_pozdeev; 11.09.2014
!!
(это два логических оператора not) нормализует любое скалярное значение до 0
или 1
.
- person Keith Thompson; 04.12.2019
Исключающее ИЛИ = A или B, но не A и B или ни то, ни другое (не может быть равно [!=])
Таким образом, исключающее ИЛИ является точной противоположностью и может быть легко представлено == или ===.
Однако небулевы случаи представляют проблемы, как в этом примере:
a = 5
b = 1
if (a == b){
...
}
вместо этого используйте это:
a = 5
b = 1
if((a && b) || (!a && !b)){
...
}
or
if(!(a || b) && (a && b)){
...
}
первый пример вернет false (5 != 1), а второй вернет true (значения a[value?] и b[value?] возвращают одно и то же логическое значение, true (значение = не 0/есть значение )
пример alt - это просто обратный (a || b) && !(a && b) (XOR) вентиль
Нет, вам нужно использовать !(A^B)
Хотя я предполагаю, что вы могли бы использовать перегрузку оператора, чтобы сделать свой собственный XNOR.
Вы можете использовать оператор ===
для XNOR. Просто вам нужно преобразовать a
и b
в bool.
if (!!a === !!b) {...}
===
- person trailmax; 31.03.2017
===
непринудительный оператор - это javascript, а двойной !!
перед значением в оценке также недействителен в С#
- person Remi; 26.10.2017
==
для логических операндов... - person Magnus Hoff   schedule 14.08.2011