C # 조건부 AND (&&) OR (||) 우선 순위
우리는 항상 제 작업에서 불필요한 코딩 논쟁을합니다. 오늘 저는 조건부 AND (&&) 또는 OR (||)의 우선 순위가 더 높은지 물었습니다. 동료 중 한 명이 같은 우선 순위를 가지고 있다고 주장했고 의심이있어서 찾아 보았습니다.
MSDN에 따르면 AND (&&)는 OR (||)보다 우선 순위가 높습니다. 그러나 회의적인 동료에게 그것을 증명할 수 있습니까?
http://msdn.microsoft.com/en-us/library/aa691323(VS.71).aspx
bool result = false || true && false; // --> false
// is the same result as
bool result = (false || true) && false; // --> false
// even though I know that the first statement is evaluated as
bool result = false || (true && false); // --> false
그래서 제 질문은 AND (&&)가 OR (||)보다 우선 순위가 높다는 것을 코드로 어떻게 증명합니까? 당신의 대답이 중요하지 않다면 왜 그 언어로 그렇게 만들어 졌습니까?
첫 번째 거짓을 참으로 변경하십시오. (사실 || 사실)을 갖는 것이 어리석은 것처럼 보이지만 그것이 당신의 요지를 증명합니다.
bool result = true || true && false; // --> true
result = (true || true) && false; // --> false
result = true || (true && false); // --> true
정말로 그를 놀라게하고 싶다면 :
bool result = True() | False() && False();
Console.WriteLine("-----");
Console.WriteLine(result);
static bool True()
{
Console.WriteLine(true);
return true;
}
static bool False()
{
Console.WriteLine(false);
return false;
}
다음과 같이 인쇄됩니다.
True
False
False
-----
False
편집하다:
댓글에 대한 답변 :
C # |
에서는와 동일한 부울 논리를 수행 ||
하지만 단락되지 않는 논리 연산자입니다 . 또한 C #에서 |
연산자는 ||
및 &&
.
값을 인쇄하면 일반적인 ||
연산자를 사용 하면 첫 번째 연산자 만 True
인쇄되고 그 뒤에 식의 결과도 인쇄된다는 것을 알 수 True
있습니다.
그러나 인해 높은 우선 순위의 |
상기가 true | false
평가되고 제 (결과 true
)와 후 그 결과가된다 &&
에드 false
수율 false
.
나는 평가의 순서를 보여 주려고하지 않았고, 단지 오른쪽 절반이 |
평상시처럼 평가되지 않았을 때 평가 기간 이었다는 사실 만 알았다. :)
이것이 당신이 추구하는 것을 얻지 않습니까? 아니면 뭔가 빠졌 나봐 ...
bool result = true || false && false;
코드가 아니라 논리로 증명합니다. AND는 부울 곱셈이고 OR는 부울 더하기입니다. 이제 어느 것이 더 높은 우선 순위를 가지고 있습니까?
거짓 || 진짜 진짜
수율 : 참
거짓 && 참 || 진실
수율 : 참
부울 표현식이 단락 될 때 최종 결과를 표시 할 수 없습니다. 다음은 귀하의 사건을 해결하는 스 니펫입니다.
구현 및 | && 및 ||에서 사용하는 연산자 ( MSDN 7.11에 명시된대로) 조건부 논리 연산자
public static void Test()
{
B t = new B(true);
B f = new B(false);
B result = f || t && f;
Console.WriteLine("-----");
Console.WriteLine(result);
}
public class B {
bool val;
public B(bool val) { this.val = val; }
public static bool operator true(B b) { return b.val; }
public static bool operator false(B b) { return !b.val; }
public static B operator &(B lhs, B rhs) {
Console.WriteLine(lhs.ToString() + " & " + rhs.ToString());
return new B(lhs.val & rhs.val);
}
public static B operator |(B lhs, B rhs) {
Console.WriteLine(lhs.ToString() + " | " + rhs.ToString());
return new B(lhs.val | rhs.val);
}
public override string ToString() {
return val.ToString();
}
}
출력은 &&가 ||보다 먼저 평가된다는 것을 보여야합니다.
True & False
False | False
-----
False
더 재미를 위해 result = t || t && f 및 단락으로 어떤 일이 발생하는지 확인하십시오.
참고URL : https://stackoverflow.com/questions/1196703/c-sharp-conditional-and-or-precedence
'IT박스' 카테고리의 다른 글
Django의 collectstatic의 요점은 무엇입니까? (0) | 2020.11.08 |
---|---|
3.0으로 업데이트 한 후 Gradle 빌드 실패 (0) | 2020.11.08 |
목록에서 여러 요소 선택 (0) | 2020.11.08 |
Bash에서 2D 배열을 선언하는 방법 (0) | 2020.11.08 |
Alamofire를 사용한 NSURLSession 동시 요청 (0) | 2020.11.08 |