논리 연산자
정의
- 불 값(boolean value)를 대상으로 참, 거짓을 구하는 연산자
- 즉, 피연산자가 불 값이다.
종류
| 연산자 |
기능 |
사용 예 |
&& |
논리곱 (AND) |
a && b |
|| |
논리합 (OR) |
a || b |
! |
부정 (NOT) |
!a |
논리곱과 논리합은 기호를 두 개연속으로 사용한다.
뒤에서 살펴볼 비트 연산은 동일한 기호를 한 개만 사용하는데..
이렇게 기억할 수도 있다.
“논리 연산자는 논리를 연산하는 &( 혹은 |) 하나와, 단축연산 여부를 검사하는 검사자 &(혹은 |) 하나가 붙어 두 개로 표현한다.”
정설이 아니라, 그냥 기억하기 위한 방법이다.
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| void logical_operation(){
// && : 논리곱 (AND : 두 가지 모두 참이어야 참)
if ((8 > 3) && (9 < 2) ) println("(1) both are true");
else println("(1) someone is false");
if ((8 > 3) && (9 > 2) ) println("(2) both are true");
else println("(2) someone is false");
// || : 논리합 (OR : 둘 중 하나라도 참이면 참)
if ((8 > 3) || (9 > 2) ) println("(1) both are true");
if ((8 > 3) || (9 < 2) ) println("(2) someone is true");
if ((8 < 3) || (9 < 2) ) println("(3) both are false");
// ! : 부정 (NOT : 단항연산, 참->거짓 / 거짓->참)
int a = 2 > 1;
printf("a : %d\n", a);
printf("not a : %d\n", !a);
}
|
1
2
3
4
5
6
7
8
9
10
11
12
| # 논리곱
(1) someone is false # 둘 중 하나 거짓 --> false 부분 출력
(2) both are true # 모두 참 --> true 부분 출력
# 논리합
(1) both are true # 둘 다 참 --> ture
(2) someone is true # 둘 중 하나 참 --> true
# 둘 다 거짓 --> 출력되지 않음
# 부정
a : 1 # 참
not a : 0 # 거짓
|
단축 연산
정의
- 논리 연산 과정에서 참이나 거짓이 확정되면, 논리식의 나머지 부분은 실행하지 않는 특성
- 단축 연산으로 인한 아래와 같은 장점들이 있다.
- (1) 불필요한 연산을 하지 않음
- (2) 나머지 피연산자 수식으로 인한 오류도 방지할 수 있다.
AND 연산에서의 단축 연산
- 좌측의 피연산자가 거짓이면 전체 식의 결과는 거짓이 됨
- 이 때 오른쪽 피연산자는 연산할 필요가 없다.
- 따라서 좌측의 피연산자가 거짓이라면 오른쪽 피연산자는 연산되지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| // AND 연산에서 좌측이 거짓이면 전체 식의 결과는 거짓이 된다.
int a = 0;
int b = 10;
if (a != 0 && b / a > 10){
println("참입니다.");
}
// 연산이 되지 않기 때문에 증감연산자 또한 계산되지 않는다.
int c = 1;
int d = 2;
if (c > d && ++c == d){
println("c의 값은 d와 같습니다.");
}
printf("c : %d\n", c); // 여기만 출력됨
|
OR 연산에서의 단축 연산
- 좌측의 피연산자가 참이면 전체 식의 결과는 참이 됨
- 이 때 오른쪽 피연산자는 연산할 필요가 없다.
- 따라서 좌측의 피연산자가 참이라면 오른쪽 피연산자는 연산되지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| // OR 연산에서 좌측이 참이면 전체 식의 결과는 참이 된다.
int e = 1;
int f = 20;
if (e == 1 || f / e > 10){
println("참입니다.");
}
// 연산이 되지 않기 때문에 증감연산자 또한 계산되지 않는다.
int g = 3;
int h = 2;
if (g > h || --g == h){
println("g의 값은 h와 같습니다.");
}
printf("g : %d\n", g);
|
1
2
3
| 참입니다.
g의 값은 h와 같습니다.
g : 3
|
Reference
C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)
Comments