Есть ли в C# оператор XNOR (логический двунаправленный)?
Я новичок в C# и не могу найти оператор XNOR, чтобы предоставить эту таблицу истинности:
аба XNOR б ---------------- ТТТ ПТФ ФТФ F F T
Есть ли конкретный оператор для этого? Или мне нужно использовать!(A^B)?
5 ответов
XNOR - это просто равенство по логическим значениям; использование A == B
,
Это легко упустить, так как равенство обычно не применяется к логическим значениям. И есть языки, где это не обязательно будет работать. Например, в C любое ненулевое скалярное значение считается истинным, поэтому два "истинных" значения могут быть неравными. Но вопрос был помечен 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 (значения a[value?] и b[value?] возвращают одно и то же логическое значение, true (значение = не 0/ есть значение))
альтернативный пример - просто перевернутые (a || b) &&!(a && b) (XOR) ворота
Нет, вам нужно использовать !(A^B)
Хотя я полагаю, вы могли бы использовать перегрузку операторов для создания собственного XNOR.
Есть несколько побитовых операций, которые я не считаю обычными во всем обсуждении. Даже в c добавление или вставка в конец строки, все это знакомо в стандартных библиотеках ввода-вывода и математических библиотеках. здесь я считаю, что проблема заключается в не и Xnor, не знакомом с python, но я предлагаю следующий пример
function BitwiseNor(a as integer) l as string l=str(a) s as string For i=len(l) to 0 s=(str(i)+"="+Bin(i)) // использование строки в этом примере, потому что двоичные числа или числа с основанием 2 не существуют в языке, который я использовал next i endfunction s
function BitwiseXNor(a as integer,b as integer)r as integerd as integerc as stringc=str(BitwiseOr(a,b))r=(val(c,2)) // число в этом преобразовании равно конечная функция базового числа r
Ты можешь использовать ===
оператор для XNOR. Просто нужно конвертировать a
а также b
кипеть
if (!!a === !!b) {...}