본문 바로가기
개발/C, C++

[C/C++] 논리 연산자

by 77monkey 개발자 2023. 9. 9.
반응형

논리 연산자는 조건문과 논리적인 표현을 다룰 때 중요합니다. C/C++에는 논리 연산자가 3가지가 있는데 살펴보도록 하겠습니다. 

 

논리 연산자

논리 AND 연산자 (&&)

논리 AND 연산자는 두 개의 조건이 모두 참일 때만 전체 식이 참이 됩니다. 

A B A && B
true true true
true false false
false true false
false false false

위 표를 보면 A와 B가 모두 참일 때 A && B가 참(true)이고 그 외에는 모두 거짓(false)인 것을 볼 수 있습니다.

예제 코드는 다음과 같습니다. 

#include <stdio.h>

int main() {
	int a = 0;
	int b = 0;

	if (a == 0 && b == 0) {
		printf("a, b are zero\n");
	}

	return 0;
}

a와 b라는 변수가 모두 0으로 선언되어 있고, a와 b가 각각 0인지 확인해서 0이면 출력하는 코드입니다. 

 

논리 OR 연산자 (||)

논리 OR 연산자는 두 개의 조건 중 하나 이상이 참일 때 전체 식이 참이 됩니다.

A B A || B
true true true
true false true
false true true
false false false

A와 B가 모두 거짓(false)일 때를 제외하고 A 또는 B 중 하나만이라도 참이 되면 A || B의 결과는 참(true)가 됩니다.

#include <stdio.h>

int main() {
	int a = 0;
	int b = 0;

	if (a != 0 || b != 0) {
		printf("not print\n");
	}

	return 0;
}

a와 b가 모두 0인데 if문에서는 둘 다 0이 아닌지를 확인하고 있습니다. 그렇기 때문에 not print는 출력되지 않습니다. 

 

논리 NOT 연산자 (!)

논리 NOT 연산자는 주어진 조건을 부정합니다. 그렇기 때문에 참일 경우에는 거짓을, 거짓일 경우에는 참으로 결과를 바꿉니다. 

A !A
true false
false true

위 표와 같이 논리 NOT 연산자를 사용하여 표현할 수 있는 경우는 2가지 밖에 없습니다. 나중에 배울 ~와 헷갈리신 분들이 계시는데 ~는 비트 연산자로 비트를 다 반전시키는 것입니다. NOT은 조건식에서 참 또는 거짓을 바꾸는 작업입니다. 헷갈리지 않으셨으면 좋겠습니다. 

#include <stdio.h>

int main() {
	int a = 0;

	if (!a) {
		printf("a is zero\n");
	}

	return 0;
}

코드 결과는 a가 0이라서 false인데, 앞에 논리 NOT 연산자를 붙여 true로 if문이 평가되어 a is zero가 출력이 됩니다. 

 

Short Circuit

Short Circuit은 논리 연산자에서 정말 중요한 부분입니다. Short Circuit을 쉽게 말씀드리면 전체 조건식을 다 보기 전에 이미 참 또는 거짓으로 판별이 되면 남은 조건식을 보지 않은 것을 의미합니다. 

 

논리 AND 연산자 (&&)의 Short Circuit

논리 AND 연산자에 대해서 위에서 표로 정리한 것을 기억하시나요?

if (조건1 && 조건2) {
	//동작
}

조건1과 조건2가 있을 때, 조건1이 거짓이라면 조건2의 결과를 보지 않아도 if문은 거짓이 됩니다. 그렇기 때문에 항상 참인 경우보다는 거짓일 확률이 높은 조건을 앞에 배치하는 것도 하나의 전략입니다. for문과 같은 반복문 안에 있다면 조건문 하나를 덜 보게 되면 시간적으로 절약할 수 있기 때문입니다. 

 

논리 OR 연산자 (||)의 Short Circuit

논리 OR 연산자에 대해서도 위에서 표로 정리를 했었습니다. 논리 AND 연산자의 Short Circuit를 보고 나니 이제 감이 잡히셨나요? 

if (조건1 || 조건2) {
	// 동작
}

조건1이 참이 되면 조건2의 결과는 보지 않고 if절을 실행합니다. 이 경우는 논리 AND 연산자의 Short Circuit과 반대로 참인 확률이 높은 것을 조건1로 배치하는 것이 하나의 전략이 되겠습니다. 

 

마무리

논리 연산자는 처음 보시면 조금 헷갈릴 수 있습니다. 특히 논리 연산자에 대해서 잘 알고 있더라도 Short Circuit에 대해서 잘 모르셨을 수 있습니다. 그렇기 때문에 해당 내용에 대해서 잘 숙지하시길 바랍니다.

반응형

'개발 > C, C++' 카테고리의 다른 글

[C/C++] 삼항 조건 연산자(삼항 연산자)  (0) 2023.09.13
[C/C++] 비트 연산자  (0) 2023.09.11
[C/C++] 관계 연산자  (0) 2023.09.08
[C/C++] 증감 연산자(++, --)  (0) 2023.09.07
[C/C++] 대입 연산자  (0) 2023.09.06