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
   30   31   32   33   34   35   36   37   38   39   40