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


136

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

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

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


94
이 연산자는 일반적으로 ==부울 피연산자 로 알려져 있습니다 .
Magnus Hoff

@ 매그너스 호프 : 아주 좋은 포인트!
sll

24
"나무의 나무를 볼 수 없습니다"라는 문구가 여기에 매우 적합하다고 생각합니다. 우리 모두 여기에 한두 번 있기 때문에 투표;)
지출 자

1
어쩌면 멋진 쉘 코드를 작성하고 비교 연산을 숨길 필요가있는 OP iz l33t k! d 일 수 있습니다. 가능성은 ...
Kerrek SB

4
미안해, 커렉 난 그런 사람들이 아니야 그리고 지출자는 바로 여기에 있습니다-)
trailmax

답변:


250

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

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

또한 0x1234 XNOR 0x5678 == 0xFFFFBBB332 비트를 가정하여 원하는 비트 단위 작업으로 일반화되지는 않습니다 . 이를 위해서는 다음과 같은 다른 작업에서 구축해야합니다 ~(A^B). (참고 : ~아닙니다 !.)


6
C에서 !연산자를 사용하여 int를 "잘 작동하는"부울 로 변환 할 수 있습니다 !a==!b.
ivan_pozdeev

2
@ivan_pozdeev And !!(논리적 두 개의 "not"연산자)는 스칼라 값을 0또는로 정규화합니다 1.
Keith Thompson

5

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) 게이트입니다.


3

아니요, 사용해야합니다 !(A^B)

비록 연산자 오버로딩을 사용하여 자신의 XNOR을 만들 수 있다고 가정합니다.


1
이것은 논리적이지 않은 비트 단위입니다
sll

포스터에 그가 질문에 포함시킨 것을 알고 있다고 생각합니다.
Griffin

4
@ sllev 당신은 거의 나를 얻었습니다. 나는 그것을 다시 확인해야했습니다. 부울에서 작동하는 경우 C # ^는 논리적입니다. 정수 유형으로 작동하는 경우 비트 단위입니다. msdn.microsoft.com/en-us/library/zkacc7k1.aspx를
trailmax

@ trailmax : 멋진 물건, 이것을 지적 해 주셔서 감사합니다! 정말 악마가 상세하다!
sll

-6

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

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

1
C #에만 ===연산자 가 없습니다
trailmax

이 답변 중 어느 것도 맞지 않으며 ===강압적이지 않은 연산자는 자바 스크립트이며 !!평가 값 의 두 배 는 c #에서도 유효하지 않습니다.
Remi

이미 언급했듯이 c #에는 트리플 등호 연산자가 없습니다.
cramopy

===는 C #에서 피연산자가 아닙니다 ... (===)는 JavaScript입니다.
Darkcoder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.