Page 35 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 35
a 논리곱 둘 다 참이면 참 b 논리합 하나라도 참이면 참
x y x && y x y x || y
0이 아님 0이 아님 1 0이 아님 0이 아님 1
0이 아님 0 0 0이 아님 0 1
0 0이 아님 0 0 0이 아님 1
0 0 0 0 0 0
[그림 1C-6] 논리곱 연산자와 논리합 연산자
논리 연산자의 단축 평가
no에 입력한 값이 5인 경우 식 no < 10의 평갓값은 1이므로 오른쪽 피연산자 no > 99를 평가하지 않
아도 제어식 no < 10 || no > 99의 값이 1이 됩니다. 왼쪽 피연산자 x와 오른쪽 피연산자 y 중 어느 하
나라도 0이 아니면 논리식 x || y의 값은 1이기 때문입니다. 그러므로 || 연산자의 왼쪽 피연산자를 평
가한 값이 1이면 오른쪽 피연산자는 평가하지 않습니다.
마찬가지로 && 연산자의 경우 왼쪽 피연산자를 평가한 값이 0이면 오른쪽 피연산자는 평가하지 않습
니다.
이처럼 논리 연산의 식 전체를 평가한 결과가 왼쪽 피연산자의 평가 결과만으로 정확해지는 경우 오른
쪽 피연산자의 평가를 수행하지 않는데, 이를 단축 평가(short circuit evaluation)라고 합니다.
드모르간 법칙
앞의 프로그램에서 초록색 박스로 표시한 부분의 제어식을 논리 부정 연산자 !을 사용하여 수정하면 아
래와 같습니다(논리 부정 연산자는 피연산자가 0이 아니면 0을, 0이면 1을 만드는 단항 연산자입니다).
!(no >= 10 && no <= 99)
‘각 조건을 부정하고 논리곱을 논리합으로, 논리합을 논리곱으로 바꾸고 다시 전체를 부정하면 원래의
조건과 같다’라는 법칙을 드모르간 법칙(De Morgan's laws)이라고 합니다. 이 법칙을 일반적으로 나타
내면 아래와 같습니다.
1 x && y와 !(!x || !y)는 동일하다.
2 x || y와 !(!x && !y)는 동일하다.
위 프로그램에서 제어식 (no < 10 || no > 99)가 반복을 계속하는 ‘계속 조건’인 반면, 위의 식 !(no >=
10 && no <= 99)는 반복을 종료하는 ‘종료 조건’의 부정입니다. 다음 그림 1C-7에 그 관계를 나타냈
습니다.
01•기본 알고리즘 35