Programming Language/C++

Ch 04. 연산자 - 03. 논리 연산자

hustle_D 2025. 3. 29. 17:22
반응형

논리 연산자의 경우는 연산자의 우선순위에 대해서 유의하면서 사용해야한다.

추가로 단락 평가(short-circuit evaluation)라는 것에 대해서만 이해하고 있으면 될것 같다.

 

&& 연산의 단락 평가(short-circuit evaluation)

&&연산은 모든 값이 true일때 true이고 하나의 값이라도 false라면 false를 출력한다.

 

만약 아래와 같은

이런 비교 연산을 한다면 

이 부분에서는 true가 나오고 

이 부분에서는 false가 나온다

 

이렇게 하면 && 연산자는 좌, 우항의 결과를 모두 확인하고 결과를 출력한다.

 

그러나 만약 

이렇게 좌항이 false로 떨어지는 경우라면 && 연산자는 우항의 연산을 진행하지 않고 바로 false를 반환한다.

 

이걸 확인하는 방법으로 먼저 printf의 결과는 출력하는 값의 길이(바이트 값)를 출력한다

이렇게 실행시켜보면

이렇게 한글 2바이트 3개인 6바이트를 반환하는 것을 알 수 있다(이건 인코딩방식에 따라 값이 다를 수 있음).

그래서 이 printf를 조건절에 넣어서 출력하면서 해당 값이 출력되는지를 확인해서 실행을 했는지 안했는지를 확인해볼 수 있다.

보면 test2가 실행이 안된 것을 볼 수 있다.

이는 

좌항인 부분이 false로 전달이 되었기에 우항을 실행조차 안하고 그냥 false로 반환했기 때문이다.


이게 바로 단락 평가(short-circuit evaluation)이다.

 

|| 연산자의 경우는 이 반대가 된다.

|| 연산자의 단락 평가(short-circuit evaluation)

|| 연산자의 경우는 좌, 우항중 하나라도 true라면 true를 반환하고 둘다 false일 경우 false를 반환한다.

 

그래서 좌항이 true를 반환한다면 우항에 대한 계산을 진행하지 않고 바로 true를 반환한다.

이 경우 단락 평가를 진행한다.

 

이것도 동일한 방식으로 확인해보면 

이렇게 좌항이 true가 된다면 우항이 어떤것이던 확인하지않고 true를 반환한다.

실행시켜보면 

동일하게 test1만 출력되는 것을 볼 수 있다.

반응형