Skip to content

33. 비트 연산자(Bitwise Operator)


1. 키워드

  • 비트 연산자(Bitwise Operator)


2. 비트 연산자 사용하기

  • 대부분의 프로그래밍 언어는 2진수를 다루는 연산자를 제공한다.


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

  • 10진수를 2진수로 된 문자열로 변환할 때는 bin을 사용한다.
  • 반대로 2진수에서 10진수로는 입력 즉시 변환된다.


bin(정수)
>>> bin(13) # 10진수 13을 2진수로 변환
'0b1101'
>>> 0b1101 # 2진수 1101을 10진수로 변환
13


  • 만약 2진수가 문자열 형태라면 int에 문자열과 2를 지정하여 10진수로 변환할 수 있다.
  • 그리고 코드에서 2진수를 직접 입력할 때는 맨 앞에 0b를 붙인다.


int("2진수문자욜", 2)
>>> int('1101', 2) # 2진수로 된 문자열 1101을 10진수로 변환
13


2) 2진수 표현 방법

  • 10진수 13을 2진수로 표현하면 1101이 된다.
  • 여기서 2진수의 자릿수는 일정한 값을 가지는데 낮은 자릿수부터 2의 거듭제곱 순서로 커진다.
  • 따라서 11018, 4, 2, 1에서 1이 위치한 자릿수가 8, 4, 1이므로 8 + 4 + 1 = 13이다.


001


3) 비트 논리 연산자 사용하기

  • 이제 2진수의 각 자릿수를 AND, OR, XOR, NOT 연산을 하는 비트 논리 연산자를 사용해 보자.


a & b
a | b
a ^ b
~x
>>> bin(0b1101 & 0b1001)
'0b1001'
>>> 13 & 9
9

>>> bin(0b1101 | 0b1001)
'0b1101'
>>> 13 | 9
13

>>> bin(0b1101 ^ 0b1001)
'0b100'
>>> 13 ^ 9
4

>>> bin(~0b1101)
'-0b1110'
>>> ~13
-14


4) 비트 연산자 진리표

  • &, |, ^, ~ 연산자로 각 비트를 연산했을 때의 결과(진리표)는 다음과 같다.


002


  • 예를 들어 & 연산자는 비트 AND이므로 두 값이 모두 1일 때 1이다.
  • 따라서 하나라도 0이면 0이 나온다.
  • 즉, 0b11010b1001을 비트 AND 연산했을 때 0 & 10 그리고 1 & 11이 나오므로 0b1001이 된다.
  • 10진수로 표현하면 13 & 99가 된다.


>>> bin(0b1101 & 0b1001)
0b1001
>>> 13 & 9
9


  • 다음과 같이 비트 논리 연산자는 각 자릿수를 연산하여 결과를 만든다.
  • 이때 각 자릿수의 연산 결과는 다른 자릿수에 영향을 미치지 않는다.


003


5) 시프트 연산자 사용하기

  • 시프트 연산자는 << 또는 >> 다음에 비트를 이동시킬 횟수를 지정한다.
  • <<는 비트를 왼쪽으로 이동시키고, >>는 비트를 오른쪽으로 이동시킨다.


a << b
b >> a
>>> 0b0011 << 2
12
>>> bin(12)
'0b1100'

>>> 0b1100 >> 2
3
>>> bin(3)
'0b11'


  • 참고로 비트를 오른쪽으로 이동시켰을 때 1이 들어갈 공간이 없다면 1은 사라진다.
  • 즉, 계속 비트를 오른쪽으로 이동시키면 1은 모두 사라지고 최종 결과는 0b0이 된다.


6) 비트 연산자 목록

  • 다음은 파이썬의 비트 연산자이다.


004


References