21.4 조건식과 논리 연산자 사용하기
값뿐만 아니라 조건식 자체도 논리 연산자로 판단할 수 있습니다.
cond_exp_logical_operator.c
#include <stdio.h> int main() { int num1 = 20; int num2 = 10; int num3 = 30; int num4 = 15; printf("%d\n", num1 > num2 && num3 > num4); // 1: 양쪽 모두 참이므로 참 printf("%d\n", num1 > num2 && num3 < num4); // 0: 앞만 참이므로 거짓 printf("%d\n", num1 > num2 || num3 < num4); // 1: 앞만 참이므로 참 printf("%d\n", num1 < num2 || num3 < num4); // 0: 양쪽 모두 거짓이므로 거짓 printf("%d\n", !(num1 > num2)); // 0: 참의 NOT은 거짓 return 0; }
실행 결과
1 0 1 0 0
네 값을 두 값씩 묶어서 비교 연산자로 대소 관계를 비교한 뒤 논리 연산자로 참, 거짓을 판단하였습니다. 변수만 있으면 알아보기 어려우니 각 변수 값으로 바꿔서 살펴보겠습니다.
- 20 > 10 && 30 > 15: 양쪽 모두 참이므로 AND 연산자의 결과는 참입니다.
- 20 > 10 && 30 < 15: 20 > 10만 참이고, 30 < 15는 거짓이므로 AND 연산자의 결과는 거짓입니다.
- 20 > 10 || 30 < 15: 20 > 10이 참이므로 OR 연산자의 결과는 참입니다.
- 20 < 10 || 30 < 15: 양쪽 모두 거짓이므로 OR 연산자의 결과는 거짓입니다.
- !(20 > 10): 참을 NOT 연산자로 뒤집었으므로 결과는 거짓입니다.
비교 연산자와 논리 연산자가 연달아서 나오면 알아보기가 어렵습니다. 따라서 다음과 같이 괄호를 사용하여 의도를 명확하게 나타내는 것이 좋습니다.
printf("%d\n", (num1 > num2) && (num3 > num4)); printf("%d\n", (num1 > num2) && (num3 < num4)); printf("%d\n", (num1 > num2) || (num3 < num4)); printf("%d\n", (num1 < num2) || (num3 < num4));
예를 들어 && 연산자는 19세 이상, 65세 미만을 가려낼 때 사용할 수 있습니다.
(age >= 19) && (age < 65)
age 변수가 19미만이면 첫 번째 조건을 만족하지 않으므로 단락 평가에 따라 두 번째 조건은 검사하지 않습니다.