Python

[Python] 비트 연산자 사용하기 - &, |, ^, ~, <<, >>

윤갬 2022. 12. 22. 18:14

파이썬의 비트연산

비트연산자는 2진수 숫자에 사용한다.

산자 기능 문법 설명
& 비트 AND a & b a와 b의 비트를 AND 연산
| 비트 OR a | b a와 b의 비트를 OR 연산
^ 비트 XOR a ^ b a와 b의 비트를 XOR 연산(배타적 OR, Exclusive OR)
~ 비트 NOT ~x x의 비트를 뒤집음
<<  비트 왼쪽 시프트 a << b a의 비트를 b번 왼쪽으로 이동시킴
>>  비트 오른쪽 시프트 a >> b a의 비트를 b번 오른쪽으로 이동시킴

 

1. 10진수와 2진수 변환하기

  • 10진수를 2진수로 된 문자열로 변환할 때는 bin()을 사용한다.
  • 반대로 2진수에서 10진수로는 입력 즉시 변환된다.
num_2 = bin(13)
print(num_2)
# 13(10) → (2) : 10진수 13을 2진수로 변환

print(0b1101)
# 0b1101(2) → (10)

 

2. 비트 논리 연산자 사용하기

>>> bin(0b1101 & 0b1001)    # 비트 AND
'0b1001'
>>> 13 & 9                  # 비트 AND
9
>>> bin(0b1101 | 0b1001)    # 비트 OR
'0b1101'
>>> 13 | 9                  # 비트 OR
13
>>> bin(0b1101 ^ 0b1001)    # 비트 XOR
'0b100'
>>> 13 ^ 9                  # 비트 XOR
4
>>> bin(~0b1101)            # 비트 NOT
'-0b1110'
>>> ~13                     # 비트 NOT
-14

 

  • 파이썬에서 이진수(binary)는 0b를 앞에 붙여 나타낸다.
  • 결과값은 두 값의 각 자릿수를 연산한다.

 

a & b (AND) : 두 값이 모두 1일 때, 1을 반환

& a 1101 (13)
b 1001 (9)
result 1001 (9)

 

a | b (OR) : 두 값 중 하나라도 1이라면 1을 반환

| a 1101 (13)
b 1001 (9)
result 1101 (13)

a ^ b (XOR) : 두 입력값을 비교하여, 같지 않으면 1을 반환

^ a 1101 (13)
b 1001 (9)
result 0100 (4)

 

~ a (NOT) : a의 비트를 뒤집는다. (0→1, 1→0)

  • 값이 제멋대로 나오는 경우가 더러 있어서, 계산 방법은 아래 영상을 참고하였다. (영상 13분 경)
  • 참고 : https://www.youtube.com/watch?v=rn6UImJw0hY
  • 연산 순서
    1. 비트 뒤집기
    2. 맨 앞에 부호를 제외하고, 다시 뒤집는다. (1의 보수 만들기)
    3. 그 값에 1을 더해준 뒤(2의 보수 만들기), 10진수 변환
    4. 부호 붙여주기

 

3. shift 연산

<<(좌측) / >>(우측)으로 한 칸씩 이동한다.

아래는 10진수 8로 비트 연산을 한 결과값이다.

num = 0b1000

print(num)
print(num<<1)
print(num>>1)

비트 시프트 연산 원리

 

a>>b :  a에   를 곱해준다.

a>>b :  a에   를 곱해준다.

 

 


🚀 참고

1) https://dojang.io/mod/page/view.php?id=2460 

2) https://www.youtube.com/watch?v=rn6UImJw0hY