파이썬의 비트연산
비트연산자는 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의 보수 만들기)
- 그 값에 1을 더해준 뒤(2의 보수 만들기), 10진수 변환
- 부호 붙여주기
3. shift 연산
<<(좌측) / >>(우측)으로 한 칸씩 이동한다.
아래는 10진수 8로 비트 연산을 한 결과값이다.
num = 0b1000
print(num)
print(num<<1)
print(num>>1)
비트 시프트 연산 원리
a>>b : a에 를 곱해준다.
a>>b : a에 를 곱해준다.
🚀 참고
'Python' 카테고리의 다른 글
[Python] map 함수 사용법과 예제 (0) | 2022.12.22 |
---|---|
[Python] print()의 옵션 - sep, end (1) | 2022.12.21 |
문자열 자료형 - 이스케이프 코드, 문자열 포매팅 (0) | 2022.12.21 |
댓글