본문 바로가기
Program Language/c++

c++ 기초(논리 연산자)

by 토담이아빠 2023. 1. 4.

논리 연산자

 

이글은 "전문가를 위한 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

댓글