C #에 XNOR (논리 이중 조건부) 연산자가 있습니까? 진리표를 제공

저는 C #을 처음 사용하고 XNOR 연산자를 사용하여이 진리표를 제공 할 수 없습니다 .

아바 XNOR b
----------------
TTT
TFF
FTF
FFT

이에 대한 특정 연산자가 있습니까? 아니면! (A ^ B)를 사용해야합니까?



답변

XNOR은 부울의 평등입니다. 사용하십시오 A == B.

평등은 일반적으로 부울에 적용되지 않으므로 쉽게 놓칠 수 있습니다. 그리고 반드시 작동하지 않을 언어가 있습니다. 예를 들어, C에서 0이 아닌 스칼라 값은 true로 처리되므로 두 개의 “true”값이 같지 않을 수 있습니다. 그러나 질문은 태그되었습니다우리는 잘 행동하는 부울을 가지고 있습니다.

또한 0x1234 XNOR 0x5678 == 0xFFFFBBB332 비트를 가정하여 원하는 비트 단위 작업으로 일반화되지는 않습니다 . 이를 위해서는 다음과 같은 다른 작업에서 구축해야합니다 ~(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을 만들 수 있다고 가정합니다.


답변

===XNOR 에는 연산자를 사용할 수 있습니다 . 그냥 변환 a하고 b부울 해야합니다 .

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