C 논리 연산자

논리 연산자는 논리 AND( && ) 및 논리 OR( || ) 연산자를 수행합니다.

구문

logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression

logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression

설명

논리 연산자는 일반적인 산술 변환을 수행하지 않습니다. 대신 각 피연산자가 0과 같은지를 평가합니다. 논리 연산의 결과는 0 또는 1입니다. 결과의 형식은 int입니다.

C 논리 연산자는 아래에 설명되어 있습니다.

연산자 설명
&& 논리 AND 연산자는 두 피연산자 모두 0이 아니면 값 1을 생성합니다. 피연산자 중 하나가 0이면 결과는 0입니다. 논리 AND 연산의 첫 번째 피연산자가 0이면 두 번째 피연산자는 평가되지 않습니다.
|| 논리 OR 연산자는 피연산자에 대해 포함적 OR 연산을 수행합니다. 두 피연산자 모두 값이 0이면 결과는 0입니다. 피연산자 중 하나가 0이 아니면 결과는 1입니다. 논리 OR 연산의 첫 번째 피연산자 값이 0이 아니면 두 번째 피연산자는 평가되지 않습니다.

논리 AND 및 논리 OR 식의 피연산자는 왼쪽에서 오른쪽으로 계산됩니다. 첫 번째 피연산자의 값이 작업의 결과를 결정하는 데 충분한 경우 두 번째 피연산자는 평가되지 않습니다. 이 효과를 “단락” 평가라고 합니다. 식의 첫 번째 피연산자 뒤 시퀀스 포인트가 있습니다. 자세한 내용은 시퀀스 포인트를 참조하세요.

다음 예제에서는 논리 연산자를 보여 줍니다.

int w, x, y, z;

if ( x < y && y < z )
    printf( "x is less than z\n" );

이 예제에서는 printf 함수는 xy보다 작고 yz보다 작은 경우 메시지를 출력하도록 호출됩니다. xy보다 크면 두 번째 피연산자(y < z)는 평가되지 않고 아무 것도 출력되지 않습니다. 논리 비교를 작성할 때 고려해야 하는 단락 평가의 또 다른 사례입니다. 그렇지 않으면 코드가 두 번째 피연산자를 평가하는 부작용에 의존하는 경우 문제가 발생할 수 있습니다.

printf( "%d" , (x == w || x == y || x == z) );

이 예제에서 xw, y 또는 z와 같을 경우 printf 함수에 대한 두 번째 인수는 true로 계산되고 값 1이 출력됩니다. 그렇지 않으면 false로 계산되고 값 0이 출력됩니다. 조건 중 하나가 true로 확인되면 계산이 중지됩니다.

참조