Python을 배우다 보면 &와 and라는 두 가지 비슷해 보이는 연산자를 만나게 됩니다. 이름은 비슷하지만 이 둘은 완전히 다른 목적으로 사용되는 연산자입니다.
AND: 논리 연산자(Logical Operator)
and는 논리 연산자로, 두 개의 조건식이나 불리언(Boolean) 값 사이의 참/거짓 관계를 판단할 때 사용합니다. 양쪽 값이 모두 참(True)일 때만 결과가 참이 됩니다.
a = True
b = False
print(a and b) # False
print(a and True) # True조건문에서 여러 조건을 동시에 확인할 때 주로 활용됩니다.
age = 25
if age >= 18 and age < 65:
print("성인입니다")&: 비트 연산자(Bitwise Operator)
반면 &는 비트 연산자로, 숫자를 이진수 비트 단위로 변환한 후 각 비트끼리 AND 연산을 수행합니다. 두 비트가 모두 1일 때만 결과 비트가 1이 됩니다.
a = 12 # 이진수: 1100
b = 10 # 이진수: 1010
print(a & b) # 8 (이진수: 1000)핵심 차이점 요약
- and: 논리 연산자 — 불리언 값이나 조건식의 참/거짓을 판단하며, 조건문에 적합합니다.
- &: 비트 연산자 — 정수의 이진수 비트 단위로 연산하며, 마스킹(bit masking)이나 저수준 데이터 처리에 사용됩니다.
주의할 점
Python에서는 &를 불리언 값에도 사용할 수 있어 혼동하기 쉽습니다. 예를 들어 True & False는 False를 반환합니다. 하지만 NumPy 배열처럼 요소별(element-wise) 연산이 필요한 경우에는 and 대신 반드시 &를 사용해야 하며, 이때 연산자 우선순위 때문에 괄호로 조건을 감싸주는 것이 안전합니다.
# NumPy 예시
import numpy as np
arr = np.array([1, 2, 3, 4])
result = arr[(arr > 1) & (arr < 4)] # [2, 3]정리하면, 일반적인 조건 판단에는 and를, 비트 단위 계산이나 배열 요소별 연산에는 &를 사용하는 것이 올바른 방법입니다.