Logical Operator
논리 연산자
Jun 08, 2026
정처기 실기 — C / Java / Python 논리연산자 정리
출처 기준: 각 언어의 공식 표준 문서 및 명세를 기반으로 작성
- C: ISO/IEC 9899:2018 (C18 표준)
- Java: Java Language Specification (JLS 21)
- Python: Python Language Reference 3.x (docs.python.org)
1. 언어별 논리연산자 비교표
| 연산자 의미 | C | Java | Python |
|---|---|---|---|
| 논리 AND | && | && | and |
| 논리 OR | || | || | or |
| 논리 NOT | ! | ! | not |
| 비트 AND | & | & | & |
| 비트 OR | | | | | | |
| 비트 XOR | ^ | ^ | ^ |
| 비트 NOT | ~ | ~ | ~ |
⚠️ 주의:
&,|는 논리연산자가 아닌 비트연산자이나, 시험에서 혼용되어 출제되므로 구분 필수
2. C 언어 논리연산자
연산자 종류
| 연산자 | 이름 | 사용 예 | 결과 |
|---|---|---|---|
&& | 논리 AND | a && b | 둘 다 참이면 1, 아니면 0 |
|| | 논리 OR | a || b | 하나라도 참이면 1, 아니면 0 |
! | 논리 NOT | !a | 참이면 0, 거짓이면 1 |
핵심 특징
- 반환값: C의 논리연산자는 int형 0 또는 1을 반환
- 참/거짓 판단:
0이면 거짓, 0이 아닌 모든 값이면 참 - 단락 평가(Short-circuit evaluation):
&&에서 앞이 거짓이면 뒤를 평가하지 않음,||에서 앞이 참이면 뒤를 평가하지 않음
코드 예시
#include <stdio.h> int main() { int a = 1, b = 0; printf("%d\n", a && b); // 0 (AND: 하나라도 거짓) printf("%d\n", a || b); // 1 (OR: 하나라도 참) printf("%d\n", !a); // 0 (NOT: 참 → 거짓) printf("%d\n", !b); // 1 (NOT: 거짓 → 참) return 0; }
출력:
0 1 0 1
단락 평가 예시 (시험 출제 포인트)
int a = 0, b = 5; // a가 0(거짓)이므로 b++는 실행되지 않음 if (a && b++) { printf("실행"); } printf("%d\n", b); // b는 여전히 5
3. Java 논리연산자
연산자 종류
| 연산자 | 이름 | 사용 예 | 특징 |
|---|---|---|---|
&& | 논리 AND (단락) | a && b | 단락 평가 적용 |
|| | 논리 OR (단락) | a || b | 단락 평가 적용 |
! | 논리 NOT | !a | - |
& | 논리 AND (비단락) | a & b | 양쪽 모두 평가 |
| | 논리 OR (비단락) | a | b | 양쪽 모두 평가 |
^ | 논리 XOR | a ^ b | 다르면 true |
핵심 특징
- 반환값:
boolean타입 (true/false) &&와&의 차이:&&→ 앞이false면 뒤 평가 안 함 (단락 평가)&→ 앞의 결과와 관계없이 뒤도 항상 평가
||와|의 차이:||→ 앞이true면 뒤 평가 안 함|→ 항상 양쪽 모두 평가
코드 예시
public class Main { public static void main(String[] args) { boolean a = true, b = false; System.out.println(a && b); // false System.out.println(a || b); // true System.out.println(!a); // false System.out.println(a ^ b); // true (XOR: 서로 다름) System.out.println(a ^ a); // false (XOR: 서로 같음) } }
출력:
false true false true false
&& vs & 차이 예시 (시험 출제 포인트)
int x = 0; // && 단락평가: x==0이 false이므로 ++x 실행 안 됨 if (x != 0 && (++x > 0)) { } System.out.println(x); // 0 // & 비단락: x!=0이 false여도 ++x 무조건 실행됨 if (x != 0 & (++x > 0)) { } System.out.println(x); // 1
4. Python 논리연산자
연산자 종류
| 연산자 | 이름 | 사용 예 | 결과 |
|---|---|---|---|
and | 논리 AND | a and b | 첫 번째 거짓값 또는 마지막 값 반환 |
or | 논리 OR | a or b | 첫 번째 참값 또는 마지막 값 반환 |
not | 논리 NOT | not a | True 또는 False 반환 |
핵심 특징 (C/Java와 가장 다른 부분)
- 반환값:
True/False가 아닌 피연산자 값 자체를 반환 (C, Java와 결정적 차이) - 단락 평가 적용:
and: 앞이 거짓이면 앞의 값을 그대로 반환, 앞이 참이면 뒤의 값 반환or: 앞이 참이면 앞의 값을 그대로 반환, 앞이 거짓이면 뒤의 값 반환
- Falsy 값:
False,0,0.0,"",[],{},None→ 거짓으로 판단
코드 예시
a = True b = False print(a and b) # False print(a or b) # True print(not a) # False print(not b) # True
출력:
False True False True
Python 고유 반환값 특성 (시험 출제 포인트)
# and: 앞이 참이면 뒤 값 반환, 앞이 거짓이면 앞 값 반환 print(1 and 2) # 2 ← 앞(1)이 참이므로 뒤(2) 반환 print(0 and 2) # 0 ← 앞(0)이 거짓이므로 앞(0) 반환 # or: 앞이 참이면 앞 값 반환, 앞이 거짓이면 뒤 값 반환 print(1 or 2) # 1 ← 앞(1)이 참이므로 앞(1) 반환 print(0 or 2) # 2 ← 앞(0)이 거짓이므로 뒤(2) 반환 # not: 항상 True/False 반환 print(not 0) # True print(not 1) # False print(not "") # True print(not "hello") # False
5. 언어별 핵심 차이 비교 요약
| 비교 항목 | C | Java | Python |
|---|---|---|---|
| AND 연산자 | && | && | and |
| OR 연산자 | || | || | or |
| NOT 연산자 | ! | ! | not |
| 참 반환값 | 1 (int) | true (boolean) | 피연산자 값 자체 |
| 거짓 반환값 | 0 (int) | false (boolean) | 피연산자 값 자체 |
| 단락 평가 | 적용 (&&, ||) | 적용 (&&, ||) | 적용 (and, or) |
| 비단락 연산자 | &, | (비트) | &, | (논리/비트) | &, | (비트만) |
| XOR | ^ (비트만) | ^ (논리/비트 모두) | ^ (비트만) |
6. 시험 빈출 포인트 정리
① 단락 평가(Short-circuit evaluation) — 세 언어 공통
&&(and): 앞이 거짓 → 뒤 실행 안 함 ||(or): 앞이 참 → 뒤 실행 안 함
→ 부수 효과(증감 연산 등)가 있는 코드에서 결과값이 달라짐
② Python의 and/or 반환값
print(3 and 0) # 0 ← bool이 아닌 값 자체 반환 print(3 or 0) # 3 print(None or 5) # 5
③ Java의 && vs &
int x = 0; boolean r1 = (x != 0) && (++x > 0); // x = 0 (단락평가로 ++x 미실행) boolean r2 = (x != 0) & (++x > 0); // x = 1 (비단락, ++x 실행됨)
④ C의 논리연산자 결과는 int형 0 또는 1
int x = 5; printf("%d\n", x && 3); // 1 (참이면 항상 1) printf("%d\n", x || 0); // 1 printf("%d\n", !x); // 0 (x가 참이므로 NOT → 0)
7. 진리표
AND
| A | B | A AND B |
|---|---|---|
| 참 | 참 | 참 |
| 참 | 거짓 | 거짓 |
| 거짓 | 참 | 거짓 |
| 거짓 | 거짓 | 거짓 |
OR
| A | B | A OR B |
|---|---|---|
| 참 | 참 | 참 |
| 참 | 거짓 | 참 |
| 거짓 | 참 | 참 |
| 거짓 | 거짓 | 거짓 |
XOR (Java, 비트연산)
| A | B | A XOR B |
|---|---|---|
| 참 | 참 | 거짓 |
| 참 | 거짓 | 참 |
| 거짓 | 참 | 참 |
| 거짓 | 거짓 | 거짓 |
NOT
| A | NOT A |
|---|---|
| 참 | 거짓 |
| 거짓 | 참 |
참고: 이 문서는 C18, JLS 21, Python 3.x 공식 명세 기준으로 작성되었습니다.
정처기 실기 시험에서는 코드 추적 문제에서 단락 평가와 반환값 타입 차이가 주로 출제됩니다.
Go toor?