프로그래밍 공부
작성일
2024. 1. 5. 14:28
작성자
WDmil
728x90

1.1.8 논리 산출 연산자

 

이미 논리 산출 연산자로서 > 연산자를 사용하였다.

> 연산자는 두 값을 비교하여 왼쪽이 크면 참을 아니라면 거짓을 리턴 한다.

 

모든 조건 연산자는 위와같은 패턴으로 동작하는것을 기억하자.

 

조건 연산자의 결괏값은 항상 true 또는 false이다.

 

연산자 설명 사용 예
<
<=
>
>=
왼쪽 값을 오른쪽 값과 비교하여 작음, 작거나 같음, 큼 , 크거나 같음에 따라 참, 거짓을 반환한다. if(i < 0) {
    std::cout << "i 는 음수다.";
}
== 왼쪽과 오른쪽 값이 같으면 참이다. 대입 연산자 =과는 다르다. if( i == 3) { 
    std::cout << "i 는 3이 아다.";
}
!= 왼쪽과 오른쪽값이 다르다면 참이다. if( i!= 3) {
    std::cout << "i는 3이 아니다.";
}
! 단항 연산자로, 논리 NOT연산과 같다.
참과 거짓의 결과를 반전한다.
if(!someBollean) {
    std::cout << "someBollean은 거짓이다.";
}
&& 논리 AND 연산과 같다. 왼쪽과 오른쪽 변수 또는 표현식의 결과가 모두 참이면 참을 반환한다. if ( someBoolean && someOtherBoolean) {
    std::cout << "양쪽 다 참이다.";
}
|| 논리 OR연산과 같다. 왼쪽 오른쪽 어느쪽이든 참이면, 참을 반환한다. if( someBoolean || someOtherBollean) {
    std::cout << "최소한 둘 중 하나는 참이다.";
}

 

C++는 표현식을 실행할 때 단락 논리(shrot-circuit logic)를 적용한다.

 

즉, 조건문의 최종 결과가 나머지 표현식의 결과에 관계없이 확장될 수 있다면, 나머지 표현식은 실행하지 않는다.

 

예를들어, 다음과 같이 여러 표현식 항목에 대해 논리 OR연산을 할 때 각 표현식 항목을 실행하던 중에

겨로가가 참인것을 만나면, 그 이후 항목의 결과가 참이든 거짓이든 관계없이 전체조건 구문의 값이 참이 됨으로 이후 항목은 실행하지 않는다.

bool result = bool1 || bool2 || (i > 7) || (27 / 13 % i + 1) < 2;

위 예에서는 bool1이 참으로 판명되었다면, 전체 결과는 무조건 참이 됨으로, 나머지 부분의 계산은 이행하지 않는다.

 

이로써 불필요 작업이 실행되지 않음으로, 언어차원에서 최적화된다.

 

하지만, 이러한 자동화된 실행 생략이 찾기 어러운 버그를 만들어 낼 수 있음으로, 코드를 설계할 때 주의해야 한다.

728x90