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
'전문가를 위한 C++정리' 카테고리의 다른 글
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.10 루프 (0) | 2024.01.08 |
---|---|
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.9 배열 (0) | 2024.01.05 |
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.7 조건문 (0) | 2024.01.05 |
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.6 데이터 타입 (0) | 2024.01.04 |
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.5 연산자 (0) | 2024.01.04 |