오늘의 주제는 논리연산자입니다. 지난 시간에 이야기 한 관계연산자와는 한쌍을 이루는 연산자입니다. 관계연산자는 조건이 만족할 때 참(TRUE)이고 만족하지 않을 때 거짓(FALSE)라고 했는데 논리 연산자는 둘 이상의 관계연산자의 결과를 기준으로 TRUE or FALSE가 결정되는 연산자입니다. 논리연산자는 AND, OR, NOT이 있는데 이제 살펴보도록 하죠.
논리연산자는 다음 표와 같이 표현 할 수 있습니다.
A와 B는 각각의 관계연산자를 지칭합니다.
예)
a>b && c>d 경우? A조건과 B조건이 모두 참일때 참을 반환합니다.
a>b || c>d 경우? A조건이 참이거나 B조건이 참일 때 어느 한 조건만 참이면 참을 반환합니다.
!(a>b) 의 경우? A조건이 참이면 거짓을 반환하고 거짓이면 참을 반환합니다.
어떤 의미인지 아시겠지요.
이 부분을 논리 진리표로 정리 합시다.
A가 0이면 A조건이 거짓이고 A가 1이면 A조건이 참이라는 의미입니다. 즉, 위 논리진리표에 1,0은 조건 식의 반환되어 나오는 결과의 값으로 생각하시면 됩니다. 그 결과를 논리연산자를 통해 다시 새로운 반환 결과를 만들어 내는 것이죠.
말로 설명하니깐 잘 이해 못하실 수 있으니 코딩을 자세히 알아 봅시다.
[소스]
#include
int main(int argc, char *argv[]) {
int a, b;
a=3;
b=5;
printf("%d > %d => %d \n",a,b,a>b);
printf("%d %d \n",a,b,a<b);
printf("%d > %d && %d %d \n",a,b,a,b,((a>b)&&(a<b)));
printf("%d > %d || %d %d \n",a,b,a,b,((a>b)||(a<b)));
printf("!%d => %d \n",a,!a);
return 0;
}
코딩이 좀 복잡해 보일 수 있지만 각각을 살펴 봅시다.
a=3, b=5일때
a>b이면 3>5로 3이 5보다 크지 않습니다. 고로 거짓으로 0이 반환 됩니다. => A식
a>b이면 3<5로 3보다 5가 크기 때문에 이 조건은 참이 되어 1을 반환합니다. => B식
((a>b)&&(a<b)) => A식 && B식에서 A식은 거짓(0)이고 B식은 참(1)이 되는데 &&은 둘 다 참일 때 참이라고 했으니 이 조건식은 거짓이 되어 0을 반환합니다.
((a>b)||(a<b)) => A식 || B식에서 A식은 거짓(0)이지만 B식이 참(1)이 됨으로 ||은 둘 중 하나만 참이면 참이라고 했으니 이 조건식은 참이 되어 1을 반환합니다.
!a은 !3이 됩니다. 조건식에서는 0이 아닌 수는 모드 참이 됩니다. 고로 3은 0이 아닌수로 참이 됩니다. 그럼네 반전이니 0으로 반환합니다. 만약 !0이 였다면 0은 거짓이고 !거짓일때 반전 되어 1으로 반환하겠죠.
그러면 설명한 대로 결과가 나온지 실행을 시켜 봅시다.
[결과]
논리연산자를 간단히 살펴 보았는데 아마 궁금하신분들이 있을 거에요. 이 논리연산자를 어디에 쓰는지? 지난시간의 배운 관계연산자도 어디에서 쓰는지도요. 입문자분들은 아직 하나하나 배워가는데 이 배운 내용이 실전에 뭔가를 상상하고 표현할 때 구체적으로 어떻게 코딩에 쓰여지는지 막연하게 느껴지실 거에요. 저 또한 처음 이런것을 배울 때 참 막연했었죠. 알긴 아는데 이 원리를 구체적으로 어느 상황에서 어떻게 써야할지 잘 상상이 안갈 거에요.
아직은 조건문, 반복문 등 어떤 상황을 을 만드는 코딩을 배우지 않았기 때문에 이 관계연산자랑 논리연사자를 써먹지 못하고 있을 뿐입니다. 이 원리만 우선 제대로 개념을 잡아 놓으시면 나중에 배울 내용에 핵심 조건식으로 활용되니깐 간단히 개념만 우선 잡아주셔도 충분합니다. 더 깊게 공부하실 필요도 없고요. 나중에 여러 상황을 응용 코딩하다보면 자연스럽게 습득이 되고 활요을 할 수 있게 됩니다.