문제

우리는 항상 내 작업에서 불필요한 코딩 논쟁을 시작합니다. 오늘 나는 조건부와 (&&) 또는 (||)의 우선 순위가 높은지 물었다. 동료 중 한 명이 그들이 같은 우선 순위를 가졌다 고 주장했다. 나는 의심했다. 그래서 나는 그것을 찾았다.

MSDN에 따르면 (&&)는 (||)보다 우선 순위가 높습니다. 그러나 회의적인 동료에게 그것을 증명할 수 있습니까?

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

그래서 내 질문은 코드로 어떻게 증명 하는가 (&&)는 (||)보다 우선 순위가 높습니까? 당신의 대답이 중요하지 않다면 왜 언어로 그런 식으로 만들어 졌습니까?

도움이 되었습니까?

해결책

True로 첫 번째 거짓을 변경하십시오. 나는 그것이 어리석은 것처럼 보인다는 것을 알고 있지만 (진실) 당신의 요점을 증명합니다.

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;

당신은 코드가 아니라 논리로 그것을 증명합니다. 부울 곱셈은 부울 곱하기입니다. 이제 어느 것이 더 높은 우선 순위를 가지고 있습니까?

거짓 || 진짜 진짜

수율 : 사실

false && true || 진실

수율 : 사실

부울 표현이 단락 될 때 최종 결과를 보여줄 수는 없습니다. 다음은 귀하의 사건을 해결하는 스 니펫입니다.

그것은 & and |를 구현하는 데 의존합니다 명시된대로 && 및 ||에서 사용하는 운영자 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

추가 재미를 위해 결과 = t || t && f와 단락으로 어떤 일이 일어나는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top