본문 바로가기

알고리즘

비트 연산자

비트 연산자란?

  • 비트 연산은 데이터를 이진수(0과 1)의 비트 단위로 직접 조작하는 연산
  • 컴퓨터 내부의 데이터는 비트로 저장되므로 연산 속도가 빠름

비트 연산자의 종류

  • AND 연산: & 기호로 표기, 두 비트가 모두 1일 때 1, 나머지는 0
  • OR 연산: | 기호로 표기, 두 비트 중 하나라도 1일때 1, 나머지는 0
  • XOR 연산: ^ 기호로 표기, 두 비트가 다르면 1, 같으면 0
  • NOT 연산: ~ 기호로 표기, 비트를 0은 1로, 1은 0으로 반전
  • 왼쪽 시프트: << 기호로 표기, 비트들을 왼쪽으로 이동하고 오른쪽은 0으로 채움
  • 오른쪽 시프트: >> 기호로 표기, 비트들을 오른쪽으로 이동하고 왼쪽은 0으로 채움(음수의 경우 1로 채움)

비트 연산자의 특징

  • CPU에서 직접 지원하는 연산으로 연산 속도가 빠름
  • 하나의 정수로 여러 개의 Boolean데이터를 저장할 수 있으므로 메모리 사용이 효율적임

비트 연산자의 활용

  • AND (&)
# 짝수/홀수 판별

def is_even(n):
    return (n & 1) == 0

# n = 7일때
# 7 = 111 (이진수)
# 1 = 001 (이진수)
# 111 & 001 = 001 -> 홀수

# n = 6일때
# 6 = 110 (이진수)
# 1 = 001 (이진수)
# 110 & 001 = 000 -> 짝수

# 즉, 가장 왼쪽 비트가 1인지 확인하므로 홀수인지 짝수인지 확인할 수 있음
  • OR (|) 왼쪽 시프트 (<<)
# 2의 거듭 제곱 연산

print(1 << 3)
# 001 << 3 = 1000
# 1 * 2^3 = 8

print(3 << 2)
# 011 << 2 = 1100
# 3 * 2^2 = 12
  • 오른쪽 시프트 (>>)
# 2로 나누기 연산 (n //2)

print(5 >> 1)
# 101 >> 1 = 10
# 5 // 2 = 2