이글은 "전문가를 위한 c++(개정4판)"을 학습한 내용을 직접 실습해보며 정리한 Review용 글입니다.
논리 연산자
조건문 사용 시 거의 항상 사용하는 연산자가 논리 연산자입니다. 논리 연산자의 최종 결과는 true 또는 false가 됩니다.
예를 들어 i > 2 에서 i가 2보다 크면 true값을 반환하고 그렇지 않으면 false값을 반환합니다. 다음은 c++에서 주로 사용하는 논리 연산자를 정리한 것입니다.
연산자 | 설명 | 사용 예 |
< <= > >= |
왼쪽 값이 오른쪽 값보다 작은지(<), 작거나 같은지(<=), 큰지(>), 크거나 같은지(>=) 비교한다. |
if ( i < 0) { std::cout << "i는 음수다."; } |
== | 왼쪽 값이 오른쪽 값과 같은지 판단한다. 할당연산자인 = 와 헷갈리지 않도록 주의한다. | if ( i == 3) { std::cout << "i는 3이다."; } |
!= | 왼쪽 값이 오른쪽 값과 다른지 검사한다. | if (i != 3) { std::cout << "i는 3이 아니다."; } |
! | 부울 표현식의 값(true/false)에 대한 보수를 구하는 논리부정(NOT) 단항 연산자이다. | if (!someBoolean) { std::cout << "someBoolean이 false다." |
&& | 논리곱(AND)에 대한 연산자로 양쪽에 나온 표현식이 모두 true여야 전체 결과가 true가 된다. | if (someBoolean && someOtherBoolean) { std::cout << "둘 다 true다. "; } |
|| | 논리합(OR)에 대한 연산자로 양쪽에 나온 표현식 중에서 어느 하나가 true면 전체가 true이다. | if (someBoolean || someOtherBoolean) { std::cout << "적어도 하나가 true다."; } |
c++에서는 논리 표현식을 단락 논리(short-circuit logic) 또는 축약 논리로 불리는 방식으로 평가합니다. 이 말의 의미는 표현식을 평가하는 도중에 최종 결과가 확정되면 나머지 부분은 평가하지 않는다는 뜻입니다. 예를 들어 다음과 같이 OR 연산(||)을 평가할 때 순차적으로 검사하다가 결과가 true인 표현식을 발견하면 나머지 부분은 검사하지 않고 끝냅니다.
#include <iostream>
using namespace std;
int main()
{
bool bool1 = true;
bool bool2 = false;
int i = 8;
//bool1이 true 이므로 나머지는 검사하지 않는다.
bool result = bool1 || bool2 || (i > 7) || (27 / 13 % i + 1) < 2;
return 0;
}
AND 연산(&&)도 마찬가지입니다. 검사 값이 0이 나오면 항상 false 이므로 그 이후 부터는 단락이 됩니다.
#include <iostream>
using namespace std;
int main()
{
bool bool1 = true;
bool bool2 = false;
int i = 8;
//bool2가 false 이므로 이후 부터는 검사하지 않는다.
bool result = bool1 && bool2 && (i > 7) && (27 / 13 % i + 1) < 2;
return 0;
}
단락기능은 프로그램 성능을 높이는 데 도움이 됩니다. 따라서 단락되는 논리식을 작성할 때는 가벼운 검사 부분은 앞에 두고 시간이 오래걸리는 검사부분은 뒤에 두게 됩니다.
'Program Language > c++' 카테고리의 다른 글
c++ 기초(C 스타일 배열) (0) | 2023.01.05 |
---|---|
C++ 기초(함수) (0) | 2023.01.05 |
C++ 기초(조건 연산자) (0) | 2023.01.04 |
C++ 기초(조건문(switch/case)) (2) | 2023.01.03 |
c++ 기초(조건문(if ~ else if ~ else)) (0) | 2023.01.03 |
댓글