Есть ли в 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) {...}
Другие вопросы по тегам