논리 연산
논리 연산(論理演算, logical operation 또는 Boolean operation)은 참과 거짓의 진리값을 대상으로 새로운 진리값을 산출하는 연산이다.
논리 연산은 명제 논리, 불 대수, 디지털 회로, 프로그래밍 언어에서 널리 사용되는 기본 연산이다. 일반적으로 입력값은 참(True, 1)과 거짓(False, 0) 중 하나이며, 연산 결과도 참 또는 거짓으로 표현된다.[1]
논리 연산은 수학적으로는 불 대수(Boolean algebra)의 연산으로 다루어지고, 컴퓨터에서는 조건식 평가, 비트 조작, 논리 게이트 설계, 데이터 필터링 등에 사용된다.[2]
논리 연산의 기본 연산에는 논리곱, 논리합, 부정, 배타적 논리합 등이 있다.
| 연산 | 영문명 | 기호 | 설명 |
|---|---|---|---|
| 논리곱 | AND | ∧ | 두 입력이 모두 참일 때만 참이다. |
| 논리합 | OR | ∨ | 두 입력 중 하나 이상이 참이면 참이다. |
| 부정 | NOT | ¬ 또는 ~ | 입력의 진리값을 반대로 바꾼다. |
| 배타적 논리합 | XOR | ⊕ | 두 입력의 진리값이 서로 다를 때만 참이다. |
| 부정 논리곱 | NAND | ↑ | AND 결과를 부정한 연산이다. |
| 부정 논리합 | NOR | ↓ | OR 결과를 부정한 연산이다. |
진리표는 가능한 모든 입력 조합에 대해 논리 연산의 결과를 나타낸 표이다. 두 입력 A, B에 대한 대표적인 논리 연산의 진리표는 다음과 같다.
| A | B | A AND B | A OR B | A XOR B | NOT A |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 |
여기서 1은 참, 0은 거짓을 의미한다. NOT 연산은 단항 연산이므로 B의 값과 관계없이 A의 값만으로 결과가 결정된다.
불 대수는 참과 거짓, 또는 1과 0으로 표현되는 값을 대상으로 하는 대수 체계이다. 논리 연산은 불 대수의 기본 연산으로, 디지털 회로의 스위칭 동작과 컴퓨터의 이진 처리 방식을 설명하는 데 사용된다.[3]
대표적인 불 대수 법칙은 다음과 같다.
| 법칙 | 예 |
|---|---|
| 항등 법칙 | A AND 1 = A, A OR 0 = A |
| 지배 법칙 | A AND 0 = 0, A OR 1 = 1 |
| 멱등 법칙 | A AND A = A, A OR A = A |
| 보수 법칙 | A AND NOT A = 0, A OR NOT A = 1 |
| 교환 법칙 | A AND B = B AND A, A OR B = B OR A |
| 결합 법칙 | (A AND B) AND C = A AND (B AND C) |
| 분배 법칙 | A AND (B OR C) = (A AND B) OR (A AND C) |
| 드 모르간 법칙 | NOT (A AND B) = (NOT A) OR (NOT B) |
논리 연산은 컴퓨터의 하드웨어와 소프트웨어 양쪽에서 모두 사용된다.
- 조건식 평가: 조건문과 반복문에서 참·거짓을 판단한다.
- 비트 연산: 정수 데이터를 비트 단위로 조작한다.
- 디지털 회로: AND 게이트, OR 게이트, NOT 게이트 등 논리 게이트의 동작을 정의한다.
- 검색과 필터링: 여러 조건을 결합해 데이터를 선택한다.
- 권한 및 플래그 처리: 특정 비트가 설정되어 있는지 검사하거나 조합한다.
예를 들어 프로그래밍 언어에서는 두 조건이 모두 만족되어야 하는 경우 AND를 사용하고, 둘 중 하나만 만족되어도 되는 경우 OR를 사용한다. Microsoft의 C# 문서에서는 `bool` 피연산자에 대해 논리 부정, 논리 AND, 논리 OR, 배타적 OR, 조건부 논리 AND, 조건부 논리 OR 연산자를 제공한다고 설명한다.[4]
논리 연산자는 보통 참과 거짓으로 평가되는 값을 대상으로 한다. 반면 비트 연산자는 정수의 각 비트를 대상으로 같은 종류의 연산을 수행한다.
| 구분 | 대상 | 예 |
|---|---|---|
| 논리 연산 | 참·거짓 값 | 참 AND 거짓 = 거짓 |
| 비트 연산 | 이진수의 각 비트 | 1010 AND 1100 = 1000 |
프로그래밍 언어에 따라 `&&`, `||`, `!`는 논리 연산자로, `&`, `|`, `^`, `~`는 비트 연산자로 구분되는 경우가 많다. 다만 언어마다 연산자의 의미와 평가 방식이 다르므로 해당 언어의 문서를 확인해야 한다.[5]
단락 평가(short-circuit evaluation)는 논리식의 결과가 이미 결정된 경우 나머지 피연산자를 평가하지 않는 방식이다. 예를 들어 AND 연산에서 첫 번째 조건이 거짓이면 전체 결과는 반드시 거짓이므로 두 번째 조건을 평가하지 않아도 된다. OR 연산에서는 첫 번째 조건이 참이면 전체 결과가 참으로 결정된다.
C#의 `&&`와 `||` 같은 조건부 논리 연산자는 필요한 경우에만 오른쪽 피연산자를 평가한다.[6]
다음은 논리 연산의 간단한 예이다.
bool a = true;
bool b = false;
bool andResult = a && b; // false
bool orResult = a || b; // true
bool notResult = !a; // false
bool xorResult = a ^ b; // true
위 예에서 `a && b`는 두 값이 모두 참이어야 참이므로 거짓이고, `a || b`는 둘 중 하나가 참이면 참이므로 참이다. `!a`는 `a`의 값을 반대로 바꾸며, `a ^ b`는 두 값이 서로 다르므로 참이다.
논리 연산은 디지털 회로의 논리 게이트로 구현된다. AND 연산은 AND 게이트, OR 연산은 OR 게이트, NOT 연산은 인버터로 구현할 수 있다. 여러 논리 게이트를 조합하면 가산기, 비교기, 멀티플렉서, 산술 논리 장치(ALU) 같은 복잡한 회로를 만들 수 있다.
특히 NAND와 NOR 게이트는 다른 논리 연산을 구성할 수 있는 범용 게이트로 알려져 있어 디지털 회로 설계에서 중요하게 사용된다.
- ↑ 논리 연산 - 위키백과, https://ko.wikipedia.org/wiki/%EB%85%BC%EB%A6%AC_%EC%97%B0%EC%82%B0, 확인한 날짜: 2026년 6월 5일
- ↑ 부울 대수 - 정보통신기술용어해설, https://www.ktword.co.kr/test/view/view.php?no=3676, 확인한 날짜: 2026년 6월 5일
- ↑ 부울 대수 - 정보통신기술용어해설, https://www.ktword.co.kr/test/view/view.php?no=3676, 확인한 날짜: 2026년 6월 5일
- ↑ 부울 논리 연산자 - C# reference, https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/boolean-logical-operators, 확인한 날짜: 2026년 6월 5일
- ↑ 부울 논리 연산자 - C# reference, https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/boolean-logical-operators, 확인한 날짜: 2026년 6월 5일
- ↑ 부울 논리 연산자 - C# reference, https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/boolean-logical-operators, 확인한 날짜: 2026년 6월 5일
