본문 바로가기

Programming/C/C++

11번째, 논리연산자

안녕하세요. 두다스입니다.
지난번 관계연산자에 이어 이번엔 논리연산자에 대해 알아보겠습니다.

논리연산이란 주어진 조건을 검사해서 참인지 거짓인지 판단하기 위해 사용합니다.
예를 들어 "20세이상이고 컴퓨터가 2대 이상인 사람", "영어점수가 90점이상이거나 평균이 50점이상인 사람" 등을 논리연산의 예로 들수 있습니다.

다음 표는 논리연산자에 쓰이는 연산자입니다.

연산자 의미 사용 예문
&& AND 영어를 잘하고, 그리고 수학도 잘하는 사람
|| OR 영어를 잘하거나, 또는 수학을 잘하는 사람
! NOT 영어를 잘하지 못하는 사람

위 사진에서 if문의 수식을 보면
첫번째 if문 수식은 " a > 0 && b > 0 " 입니다.
a > 0 과 b >0 에서 ' > ' 이것은 지난번 관계연산자에서 "크다" 라고 알아봤습니다.
가운데에 ' && ' 이것은 논리연산자입니다.
' && ' 이것은 "and, 그리고" 라는 뜻을 가지고 있으며, 둘중 하나라도 거짓이면 거짓을 출력하고 두개 모두 참이어야만 참을 출력합니다. 즉, "a > 0과 b > 0" 모두 수식이 참인지 거짓인지 검사하는 것이지요.
따라서 "a > 0 && b > 0" 은 a > 0을 먼저 검사하고 b > 0 을 검사하여 둘다 참이면 참을 출력하게 됩니다. 그래서 해당 printf문이 출력됩니다.

두번째 if문을 보면 "a > 5 || b > 5" 입니다.
' || ' 이것은 '&&' 와는 반대로 "or, 또는" 이라는 뜻을 가지고 있습니다. 그래서 ' && ' 와는 반대로 "a > 5와 b > 5"중에 하나라도 참이면 참을 출력하고 두개 모두 거짓이면 거짓을 출력합니다.
따라서 a > 5를 비교해서 참이면 뒤에 b>5는 딱히 검사하지 않아도 참을 출력하게 됩니다. 그래서 해당 printf문이 출력됩니다.

마지막 세번째 if문을 보면 " !(a<5)" 입니다.
' ! ' 이것은 Not의 의미를 가지고 있습니다. 참이면 거짓으로, 거짓이면 참으로 바꾸는 연산자입니다.
따라서 (a<5)를 검사하면 "a가 5인데 5보다 작다" 입니다. 따라서 거짓이 나오게 되고 그것을 Not ( ! ) 연산자가 바꿔주기 때문에 참이 출력되어 해당 printf문이 출력됩니다.

다음 표는 논리연산자의 우선순위입니다.


연산 우선순위 논리 연산자 비고
1 ! 참인 수식은 거짓으로, 거짓인 수식은 참으로 바꿉니다.
2 && 2개의 수식 모두 참인지 검사합니다.
3 || 둘 중 하나만 참인지 검사합니다.

오늘은 여기서 이만 마치도록 하겠습니다. 다음엔 증가, 감소 연산자에 대해 알아보겠습니다.
혹시 잘못된 점이나 부족한 점이 있으면 지적해주시기 바랍니다.

p.s. 이 글은 안랩 V스쿨 카페(http://cafe.naver.com/vgeneration)와 블로그(http://dudas.tistory.com)에만 게시합니다.