반응형
비트 연산자(Bitwise Operators)는 컴퓨터 내부에서 이진수(0과 1) 단위로 연산을 수행하는 연산자를 의미합니다. 비트 연산은 데이터 처리 속도가 빠르고, 메모리를 효율적으로 사용할 수 있어 저수준 프로그래밍에서 중요한 역할을 합니다. 특히 파이썬에서는 비트 연산자를 활용하여 최적화된 연산을 수행할 수 있습니다.
1. 비트(bit)란
- 비트(bit)는 binary digit의 약자로, '0'과 '1' 두 가지 값만을 가지는 최소 단위의 정보입니다. 즉, 컴퓨터가 데이터를 처리하는 가장 기본적인 단위가 비트입니다.
- 8개의 비트(bit)가 모이면 1바이트(byte)가 됩니다.
- 1바이트는 일반적으로 한 개의 문자를 저장하는 데 사용됩니다.
- 여러 개의 바이트가 모여 킬로바이트(KB), 메가바이트(MB), 기가바이트(GB) 등의 단위를 형성합니다.
2. 이진수(Binay)
- 이진수(binary number)는 '0'과 '1'만을 사용하여 숫자를 표현하는 체계입니다. 이는 우리가 일반적으로 사용하는 10진수(decimal)와는 다른 수 체계입니다.
- 파이썬에서는 bin() 함수를 사용하여 10진수를 2진수로 변환할 수 있습니다.
num_a = bin(a)
print(num_a)
num_b = bin(b)
print(num_b)
[출력 값]
num_a : 0b110
num_b : 0b101
참고: 파이썬에서 이진수를 나타날 때, 0b(zero-b)를 앞에 붙여 표현합니다.
* 이진수에 대한 자세한 설명은 아래 링크를 참조해 주시기 바랍니다.
2025.01.31 - [데이터 분석 관련] - 2진수와 10진수 : 개념부터 변환 방법, 그리고 2진수의 음수 표현
2진수와 10진수 : 개념부터 변환 방법, 그리고 2진수의 음수 표현
컴퓨터가 이해하는 숫자는 우리가 일상에서 사용하는 숫자와 다릅니다. 우리는 일반적으로 10진수(Decimal)를 사용하지만, 컴퓨터는 2진수(Binary)로 데이터를 처리합니다. 이번 글에서는 2진수와 10
cjangela.tistory.com
3. 비트 연산자
- 비트 연산자는 이진수로 표현된 숫자에 대해 비트 단위의 연산을 수행하는 연산자입니다.
- 주요 비트 연산자느 다음과 같습니다.
연산자 | 의미 | 설명 |
& | AND | 두 비트가 모두 1이면 1을 반환 |
| | OR | 둘 중 하나라도 1이면 1을 반환 |
^ | XOR | 두 비트가 서로 다르면 1을 반환 |
~ | NOT | 비트를 서로 반전 |
<< | Left Shift | N칸 왼쪽 비트로 이동 |
>> | Right Shift | N칸 오른쪽 비트로 이동 |
1) & (AND)
- 두 비트 모두 1일 때, 1을 반환합니다.
# 예제
a = 6 # 이진수: 110
b = 5 # 이진수: 101
print(a & b)
# 결과값
4 # 이진수: 100
a = 6 | b = 5 | a & b = 4 |
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
2) | (OR)
- 둘 중 하나가 1일 때, 1을 반환합니다.
# 예제
a = 6 # 이진수: 110
b = 5 # 이진수: 101
print(a | b)
# 결과값
7 # 이진수: 111
a = 6 | a = 5 | a | b = 7 |
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
3) ^ (XOR)
- 두 비트가 서로 다르면, 1을 반환합니다.
# 예제
a = 6 # 이진수: 110
b = 5 # 이진수: 101
print(a ^ b)
# 결과값
3 # 이진수: 011
a = 6 | b = 5 | a ^ b = 3 |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
4) ~ (NOT)
- 비트를 서로 반전시킵니다.
# 예제
a = 6 # 이진수: 00110
print(~a)
# 결과값
-7
비트의 ~(NOT) 연산 순서입니다.
1. 비트 반전 : ~(NOT)으로, 비트를 뒤집습니다.
2. 1의 보수 : 맨 앞 부호를 제외하고, 비트를 다시 뒤집습니다.(맨 앞 비트가 1일 경우에는, 음수임)
3. 2의 보수 : 맨 마지막 값에 1을 더해줍니다.
4. 10진수 변환 후 부호 붙이기 : 최종 2진수를 10진수로 변환한 후, 앞에 마이너스(-)를 붙여 음수값으로 표현해 줍니다.
- 비트 ~(NOT) 연산 순서에 따라 표로 설명한 것입니다.
a = 6 | 0 | 0 | 1 | 1 | 0 |
~a | 1 | 1 | 0 | 0 | 1 |
~a(1의 보수) | 0 | 1 | 1 | 0 | |
~a(2의 보수) | 0 | 1 | 1 | 1 |
- ~a(2의 보수)를 10진수로 변환하면, 7이 됩니다.
- 맨 앞 비트가 1이므로, -7이 최종 결과 값이 됩니다.
5) << (Left Shift)
- N칸 왼쪽 비트로 이동하며, 오른쪽 빈자리는 0으로 채웁니다.
# 예제
a = 6 # 이진수: 00110
print(a << 1)
# 결과값
12 # 이진수: 01100
a = 6 | 0 | 0 | 1 | 1 | 0 |
왼쪽으로 1칸씩 이동 | ↙ | ↙ | ↙ | ||
a << 1 = 12 | 0 | 1 | 1 | 0 | 0 |
6) >> (Right Shift)
- N칸 오른쪽 비트로 이동하며, 왼쪽 빈자리는 0으로 채웁니다.
# 예제
a = 6 # 이진수: 00110
print(a >> 1)
# 결과값
3 # 이진수: 00011
a = 6 | 0 | 0 | 1 | 1 | 0 |
오른쪽으로 1칸씩 이동 | ↘ | ↘ | ↘ | ↘ | |
a >> 1 = 3 | 0 | 0 | 0 | 1 | 1 |
이번 글에서는 비트 연산자에 대해 알아보았습니다. 비트 연산은 논리 연산뿐만 아니라 연산 속도를 최적화하고, 특정 비트 패턴을 다룰 대 유용하게 활용됩니다. 비트 연산을 활용하면 CPU가 연산을 더욱 효율적으로 처리할 수 있으며, 이는 고성능 데이터 처리, 암호화, 그래픽 처리 등 다양한 분야에서 유용하게 사용됩니다.
감사합니다:-)
반응형
'데이터 분석' 카테고리의 다른 글
파이썬 조건문 : if문, if~else문, if~elif~else문 / 파이썬으로 가위바위보 하기 (0) | 2025.02.03 |
---|---|
2진수와 10진수 : 개념부터 변환 방법, 그리고 2진수의 음수 표현 (0) | 2025.01.31 |
파이썬(Python) 연산자 총정리: 산술 연산자, 대입 연산자, 비교 연산자, 논리 연산자, 비트 연산자, 조건 연산자 (0) | 2025.01.30 |
[파이썬 기초] 입출력 : input, print, escape, format, casting (0) | 2025.01.28 |
[파이썬 기초] 컬렉션 타입(4) : 세트(set) 생성, 추가, 삭제, 반복 (0) | 2025.01.27 |