IT TIP

'&'대 '&&'사용

itqueen 2021. 1. 7. 20:16
반응형

'&'대 '&&'사용


나는 이것을 발견했다 :

bool Isvalid = isValid & CheckSomething()

bool Isvalid = isValid && CheckSomething()

두 번째 경우는 단락 시나리오가 될 수 있습니다.

그래서 우리는 항상 &대신 사용할 수 &&없습니까?


&는 비트 단위 "AND"로, 비트 수준에서 작동 함을 의미합니다. &&는 논리 "AND"로 부울 (true / false) 수준에서 작동 함을 의미합니다. 논리 AND는 단락 (첫 번째 부분이 거짓 인 경우 두 번째 부분을 검사 할 필요가 없음)을 사용하여 초과 코드 실행을 방지하고 비트 단위 AND가 필요한 모든 비트를 통해 값을 얻습니다.

논리 AND (&&)를 사용해야합니다. 그게 원하는 것이기 때문입니다 (&가 잠재적으로 옳은 일을 할 수 없음).하지만 부작용을 평가하려면 메서드를 별도로 실행해야 할 수도 있습니다.

var check = CheckSomething();
bool IsValid = isValid && check;

&&에서 두 번째 표현식은 첫 번째 표현식이 참인 경우에만 평가됩니다.

& &는 true & true = true, true & false = false 등과 같은 두 표현식을 연결하는 방법입니다.


C #에는 부울에 대한 두 가지 유형의 논리 연산자가 있습니다.

  1. x & y 논리적 AND

    • 다음 과 같은 true경우에만 결과가 발생 합니다.xytrue
    • 평가 모두 xy.
  2. x && y 조건부 논리 AND

    • 다음 과 같은 true경우에만 결과가 발생 합니다.xytrue
    • x먼저 평가 하고로 x평가 되면 평가 하지 않고 즉시 false반환 false합니다 y( short-circuiting ).

따라서 두 가지 모두에 의존 x하고 y평가를 받으면 &연산자를 사용할 수 있습니다. 비록 부작용이 항상 독자에게 명확하지 않기 때문에 거의 사용되지 않고 읽기가 어렵지만 연산자를 사용할 수 있습니다 .

참고 : 이항 &연산자는 비트 논리 AND를 수행 하는 정수 유형 에도 존재합니다 .


나는 당신이 뭔가를 놓치고 있다고 믿습니다. 두 번째 시나리오에서는 isValid가 false이면 CheckSomething이 평가되지 않습니다.

조건부 AND 연산자 (&&)는 bool 피연산자의 논리 AND를 수행하지만 필요한 경우 두 번째 피연산자 만 평가합니다.

http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.71).aspx


내가 지금까지 가지고있는 최고의 사용

void BooleanTestV1 (){
    int num = 0;
    bool IsOne = false;

    for (int i = 0; i< 100; i++){
        num = i;
        if (IsOne == false) {
            IsOne = num == 1;
        }
    }

    if (IsOne) {
        // Yeay it works!
    }
}

void BooleanTestV2 (){
    int num = 0;
    bool IsOne = false;

    for (int i = 0; i< 100; i++){
        num = i;
        if (IsOne == false && (IsOne = num == 1)) {
            // Do Somehing...
        }
    }

    if (IsOne) {
        // Yeay it works!
    }
}

void WhyUseOneAND() {
    int num = 0;
    bool IsOne = false;

    for (int i = 0; i < 100; i++) {
        num = i;
        if (num < 0 & (IsOne == false && (IsOne = num == 1))) {
            // If we are using && 
            // isOne will never checking (num == 1)
            // Because && will stop running after found a false (num < 0)
            // Good for caching (here "IsOne" is the variable we cached)

            // Note: anything here will not be executed, cuz num < 0 will never be true
        }
    }

    if (IsOne) {
        // Yeay it works!
    }
}

참조 URL : https://stackoverflow.com/questions/5537607/usage-of-versus

반응형