C #에 조건부 XOR
연산자 가없는 이유는 무엇입니까?
예:
true xor false = true
true xor true = false
false xor false = false
답변
C #에서 조건부 연산자는 필요한 경우 에만 보조 피연산자를 실행 합니다 .
XOR 은 정의에 따라 두 값을 모두 테스트 해야 하므로 조건부 버전은 어리석은 것입니다.
예 :
-
논리적 AND :
&
-매번 양쪽을 테스트합니다. -
논리적 OR :
|
-매번 양쪽을 테스트합니다. -
조건부 AND :
&&
-첫 번째면이 참인 경우 두 번째 면만 테스트합니다. -
조건부 OR :
||
-첫 번째면이 거짓이면 두 번째 면만 테스트합니다.
답변
질문이 조금 구식이지만 …
이 연산자가 작동하는 방식은 다음과 같습니다.
true xor false = true
true xor true = false
false xor true = true
false xor false = false
다음은! = 연산자가 bool 유형에서 작동하는 방식입니다.
(true != false) // true
(true != true) // false
(false != true) // true
(false != false) // false
보시다시피 ^^
존재하지 않는 것은 기존의!=
답변
답변
설명처럼 ^ 연산자는 정수 유형과 부울 모두에서 작동합니다.
참조 MSDN의 ^ 연산자 (C # 참조) :
이진 ^ 연산자는 정수 유형 및 부울에 대해 사전 정의됩니다. 정수 유형의 경우 ^는 피연산자의 비트 배타적 OR을 계산합니다. bool 피연산자의 경우 ^는 피연산자의 논리적 배타적 또는 논리 연산을 계산합니다. 즉, 피연산자 중 정확히 하나가 참인 경우에만 결과가 참입니다.
이 질문이 제기 된 2011 년 이후로 문서가 변경되었을 수 있습니다.
답변
답변
네, 그렇습니다.
bool b1 = true;
bool b2 = false;
bool XOR = b1 ^ b2;
답변
조건부 xor는 존재하지 않지만 xor가 부울에 대해 정의되고 모든 조건부 비교가 부울로 평가되므로 논리 xor를 사용할 수 있습니다.
따라서 다음과 같이 말할 수 있습니다.
if ( (a == b) ^ (c == d))
{
}