operator_logical — 논리 연산자

operator_logical — 논리 연산자 (Logical operators)

**논리 연산자(logical operator)**는 &&(AND), ||(OR), !(NOT)로 부울 논리 연산을 수행해요.

조건을 조합할 때 사용해요. &&||는 **단락 평가(short-circuit)**를 지원해, 결과가 정해지는 즉시 나머지를 평가하지 않아요.

출처: cppreference

본문

논리 연산자는 부울 값을 조합해요.

연산자

  • !x — 논리 NOT (x가 거짓이면 참)
  • a && b — 논리 AND (둘 다 참이면 참)
  • a || b — 논리 OR (하나라도 참이면 참)

동작

bool b1 = true && false;   // false
bool b2 = true || false;   // true
bool b3 = !true;           // false

단락 평가

&&||단락 평가를 해요. 결과가 정해지면 나머지 피연산자를 평가하지 않아요.

  • a && f()a가 false면 f()는 호출되지 않아요.
  • a || f()a가 true면 f()는 호출되지 않아요.
if (p != nullptr && p->value > 0) { }   // p 가 null 이면 p->value 접근 안 함
if (x != 0 && 100 / x > 1) { }          // x 가 0 이면 나눗셈 안 함

이런 특성은 포인터 널 검사 등에 안전하게 쓰여요.

논리 연산자의 결과

&&||bool을 반환해요. 조건 문맥에서 자주 쓰여요.

값이 bool이 아닌 경우

피연산자는 문맥적으로 bool로 변환돼요. 정수를 조건처럼 쓰면 0이 아님 = 참.

int count = 5;
if (count && count > 2) { }   // count != 0 은 참

오버로딩 주의

클래스에서 &&, ||를 오버로드하면 단락 평가를 잃어요 (둘 다 항상 평가됨). 그래서 일반적으로 오버로드하지 않는 것이 권장돼요.

비트 연산자와의 차이

  • 논리 연산자 &&, ||, ! — 부울 판단, 단락 평가
  • 비트 연산자 &, |, ~ — 비트 단위 연산, 단락 없음
bool r = a & b;   // 비트 AND (단락 없음)
bool s = a && b;  // 논리 AND (단락 있음)

노트 (Notes)

  • 단락 평가 덕분에 안전하고 효율적인 조건 조합이 가능해요.
  • 논리 연산자 결과는 항상 bool이에요.
  • 드 모르간 법칙 등으로 조건을 정리할 수 있어요.

더 알아보기 (Learn more)

cppreference