Python - 비트 연산자

안녕하세요, 미래의 Python 마법사들! 오늘, 우리는 비트 연산자의 세계로 흥미진진한 여정을 떠날 거예요. 이제, 당신이 무엇을 생각할지 알아요: "비트 연산자? 그것은 컴퓨터 과학자들만 관심을 가질 것 같아!" 하지만 나를 믿어요, 이 연산자들을 이해하는 것은 매우 유용하고는 심지어 재미있을 수도 있답니다! 그럼, 함께 비트와 바이트의 미스테리를 풀어보러 떠들까요.

Python - Bitwise Operators

Python 비트 연산자

비트 연산자는 숫자의 이진 표현을 위한 특수 연산자입니다. 이들은 개별 비트를 조작하며, 컴퓨팅에서 가장 작은 데이터 단위입니다. 비트를 작은 스위치로 생각해보세요. 그들은 켜져 있을 수도 있고(1) 꺼져 있을 수도 있습니다(0).

각 연산자에 들어가기 전에, Python에서 사용할 수 있는 모든 비트 연산자를 빠르게 살펴보겠습니다:

연산자 이름 설명
& AND 두 비트가 모두 1이면 각 비트를 1로 설정
| OR 두 비트 중 하나가 1이면 각 비트를 1로 설정
^ XOR 두 비트 중 하나만 1이면 각 비트를 1로 설정
~ NOT 모든 비트를 반전
<< 왼쪽 이동 오른쪽에서 0을 밀어넣어 왼쪽으로 이동
>> 오른쪽 이동 왼쪽에서 가장자리 비트를 밀어넣어 오른쪽으로 이동

이제, 각 연산자를 자세히 탐구해보겠습니다.

Python 비트 AND 연산자 (&)

비트 AND 연산자(&)는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 해당 비트와 비교합니다. 두 비트가 모두 1이면 결과 비트는 1로 설정됩니다. 그렇지 않으면 결과 비트는 0으로 설정됩니다.

예를 들어보겠습니다:

a = 5  # 이진: 0101
b = 3  # 이진: 0011
result = a & b
print(f"{a} & {b} = {result}")  # 출력: 5 & 3 = 1

이 예제에서는 5(이진: 0101)와 3(이진: 0011) 간에 비트 AND 연산을 수행하고 있습니다. 결과는 1(이진: 0001)입니다.

이렇게 작동합니다:

0101 (5)
& 0011 (3)
----
0001 (1)

보시다시피, 오른쪽 끝 비트만 두 숫자 모두 1이므로 결과에서도 그 비트만 1입니다.

Python 비트 OR 연산자 (|)

비트 OR 연산자(|)는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 해당 비트와 비교합니다. 두 비트 중 하나가 1이면 결과 비트는 1로 설정됩니다. 그렇지 않으면 결과 비트는 0으로 설정됩니다.

다음은 예제입니다:

a = 5  # 이진: 0101
b = 3  # 이진: 0011
result = a | b
print(f"{a} | {b} = {result}")  # 출력: 5 | 3 = 7

이 경우, 5와 3 간에 비트 OR 연산을 수행하고 있습니다. 결과는 7(이진: 0111)입니다.

이렇게 끊어집니다:

0101 (5)
| 0011 (3)
----
0111 (7)

결과는 원래 숫자 중 하나가 1이었던 곳에 1이 있습니다.

Python 비트 XOR 연산자 (^)

비트 XOR(排他的 OR) 연산자(^)는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 해당 비트와 비교합니다. 비트가 다르면 결과 비트는 1로 설정됩니다. 비트가 같으면 결과 비트는 0으로 설정됩니다.

예를 보겠습니다:

a = 5  # 이진: 0101
b = 3  # 이진: 0011
result = a ^ b
print(f"{a} ^ {b} = {result}")  # 출력: 5 ^ 3 = 6

여기서는 5와 3 간에 비트 XOR 연산을 수행하고 있습니다. 결과는 6(이진: 0110)입니다.

이렇게 작동합니다:

0101 (5)
^ 0011 (3)
----
0110 (6)

결과는 원래 숫자의 비트가 다를 때만 1입니다.

Python 비트 NOT 연산자 (~)

비트 NOT 연산자(~)는 단항 연산자(한 개의 피연산자만을 취합니다)로, 피연산자의 비트를 뒤집습니다. 모든 0은 1로, 모든 1은 0으로 변환됩니다.

예를 들어보겠습니다:

a = 5  # 이진: 0101
result = ~a
print(f"~{a} = {result}")  # 출력: ~5 = -6

왜 결과가 -6인지 궁금할 수 있습니다. 이는 Python이 음수를 표현할 때 2의 보수를 사용하기 때문입니다. 2의 보수에서 가장 왼쪽 비트는 부호를 나타냅니다(양수는 0, 음수는 1).

이하가 허브 아래로 작동하는 방식입니다:

00000101 (5)
~
11111010 (-6의 2의 보수)

Python 비트 왼쪽 이동 연산자 (<<)

비트 왼쪽 이동 연산자(<<)는 첫 번째 피연산자의 비트를 두 번째 피연산자가 지정한 자리수만큼 왼쪽으로 이동합니다. 오른쪽에 새로운 비트는 0으로 채워집니다.

예를 보겠습니다:

a = 5  # 이진: 0101
b = 1
result = a << b
print(f"{a} << {b} = {result}")  # 출력: 5 << 1 = 10

이 경우, 5의 비트를 1 자리 왼쪽으로 이동하고 있습니다. 결과는 10(이진: 1010)입니다.

이렇게 작동합니다:

0101 (5)
왼쪽으로 1 이동
1010 (10)

각 왼쪽 이동은 숫자를 2로 곱하는 것과 같은 효과를 가집니다.

Python 비트 오른쪽 이동 연산자 (>>)

비트 오른쪽 이동 연산자(>>)는 첫 번째 피연산자의 비트를 두 번째 피연산자가 지정한 자리수만큼 오른쪽으로 이동합니다. 양수인 경우, 왼쪽에 새로운 비트는 0으로 채워집니다.

예를 들어보겠습니다:

a = 5  # 이진: 0101
b = 1
result = a >> b
print(f"{a} >> {b} = {result}")  # 출력: 5 >> 1 = 2

여기서는 5의 비트를 1 자리 오른쪽으로 이동하고 있습니다. 결과는 2(이진: 0010)입니다.

이렇게 끊어집니다:

0101 (5)
오른쪽으로 1 이동
0010 (2)

각 오른쪽 이동은 숫자를 2로 나눈 것과 같은 효과를 가집니다(정수로 내림).

그리고 이렇게 끝납니다, 여러분! 우리는 Python의 비트 연산자의 땅을 거쳤습니다. 이 연산자들은 처음에는 좀 추상적이겠지만, 낮은 수준의 연산이나 코드 성능을 최적화할 때 매우 강력한 도구입니다.

기억하세요, 연습이 실력을 완성합니다. 이 연산자들을 써보고, 다른 숫자로 실험해보며 얻을 수 있는 결과를 봅시다. 알고보면, 당신은 프로처럼 비트를 조작하고 있을 거예요!

코딩을 즐겁게, 비트가 영원히 당신을 도와줄 것입니다!

Credits: Image by storyset