logo

Python 비트 연산자

연산자 값과 변수에 대한 작업을 수행하는 데 사용됩니다. 산술 및 논리 계산을 수행하는 특수 기호입니다. 연산자가 연산하는 값을 피연산자(Operand)라고 합니다.

Python 비트 연산자

Python 비트 연산자는 정수에 대한 비트 계산을 수행하는 데 사용됩니다. 정수는 먼저 이진수로 변환된 다음 각 비트 또는 해당 비트 쌍에 대해 연산이 수행되므로 비트 연산자라는 이름이 붙습니다. 그러면 결과가 10진수 형식으로 반환됩니다.



메모: Python 비트 연산자는 정수에서만 작동합니다.


운영자이름설명통사론

비트 AND 연산자



&비트별 AND두 피연산자 비트가 모두 1인 경우 결과 비트 1입니다. 그렇지 않으면 비트 0이 발생합니다.x & y

비트 OR 연산자

|비트별 OR피연산자 비트 중 하나라도 1인 경우 결과 비트 1입니다. 그렇지 않으면 결과는 비트 0입니다.엑스 | 그리고

비트별 XOR 연산자

^비트별 XOR결과 비트 1, 피연산자 비트 중 하나가 1이지만 둘 다는 아닌 경우 결과는 비트 0입니다.x^y

비트별 NOT 연산자



슬로카 메타
~비트별 NOT

개별 비트를 반전합니다.

~x

Python 비트 단위 오른쪽 시프트

>>비트 오른쪽 시프트

왼쪽 피연산자의 값이 비트 수만큼 오른쪽으로 이동합니다.

오른쪽 피연산자로 지정됩니다.

엑스>>

Python 비트 왼쪽 시프트

<<비트 왼쪽 시프트

왼쪽 피연산자의 값이 비트 수만큼 왼쪽으로 이동합니다.

오른쪽 피연산자로 지정됩니다.

x<<

각 연산자를 하나씩 이해해 봅시다.

비트 AND 연산자

그만큼 Python 비트별 AND(&) 연산자는 두 개의 동일한 길이의 비트 패턴을 매개변수로 사용합니다. 2비트 정수가 비교됩니다. 비트 패턴의 비교 위치에 있는 비트가 1이면 결과 비트는 1이 되고, 그렇지 않으면 0이 됩니다.

예: 두 개의 비트 값 X와 Y를 사용합니다. 여기서 X = 7= (111)2그리고 Y = 4 = (100)2. Bitwise와 X 및 y를 모두 사용하세요.

메모: 여기(111)2이진수를 나타냅니다.

파이썬
a = 10 b = 4 # Print bitwise AND operation print('a & b =', a & b)>

산출

a & b = 0>

비트별 OR 연산자

그만큼 Python 비트 OR(|) 연산자는 두 개의 동일한 길이 비트 디자인을 경계로 사용합니다. 살펴본 위치의 두 비트가 0이면 다음 비트는 0입니다. 그렇지 않은 경우 1입니다.

예: 두 개의 비트 값 X와 Y를 사용합니다. 여기서 X = 7= (111)2그리고 Y = 4 = (100)2. X, Y 모두에 대한 비트별 OR을 취합니다.

파이썬
a = 10 b = 4 # Print bitwise OR operation print('a | b =', a | b)>

산출

a | b = 14>

비트별 XOR 연산자

그만큼 Python 비트별 XOR(^) 연산자 배타적 OR 연산자라고도 하며 두 피연산자에 대해 XOR 연산을 수행하는 데 사용됩니다. XOR은 배타적 논리합(Exclusive or)을 나타내며, 피연산자 중 정확히 하나만 참인 경우에만 참을 반환합니다. 비트 연산의 경우 두 피연산자의 해당 비트를 비교합니다. 비트가 다르면 1을 반환합니다. 그렇지 않으면 0을 반환합니다.

예: 두 개의 비트 값 X와 Y를 사용합니다. 여기서 X = 7= (111)2 및 Y = 4 = (100)2 입니다. Bitwise와 X & Y를 모두 사용하세요.

파이썬
a = 10 b = 4 # print bitwise XOR operation print('a ^ b =', a ^ b)>

산출

a ^ b = 14>

비트별 NOT 연산자

앞의 세 비트 연산자는 이항 연산자이므로 작동하려면 두 개의 피연산자가 필요합니다. 그러나 다른 연산자와 달리 이 연산자는 하나의 피연산자로만 작동합니다.

그만큼 Python 비트 단위 Not(~) 연산자 단일 값으로 작동하고 그 값의 보수를 반환합니다. 즉, 값의 모든 비트를 토글하여 0비트를 1로, 1비트를 0으로 변환하여 이진수의 1의 보수를 얻습니다.

자바 연결

: 두 개의 비트 값 X와 Y를 사용합니다. 여기서 X = 5= (101)2 입니다. X의 비트별 NOT을 선택합니다.

파이썬
a = 10 b = 4 # Print bitwise NOT operation print('~a =', ~a)>

산출

~a = -11>

비트별 시프트

이 연산자는 숫자의 비트를 왼쪽이나 오른쪽으로 이동하여 숫자에 각각 2를 곱하거나 나누는 데 사용됩니다. 숫자를 2로 곱하거나 나누어야 할 때 사용할 수 있습니다.

파이썬 비트 오른쪽 시프트

결과적으로 숫자의 비트를 오른쪽으로 이동하고 왼쪽 공백을 0으로 채웁니다(음수의 경우 1을 채움). 숫자를 2의 거듭제곱으로 나누는 것과 비슷한 효과입니다.

  Example 1:   a = 10 = 0000 1010 (Binary) a>> 1 = 0000 0101 = 5 예 2: a = -10 = 1111 0110(2진수) a>> 1 = 1111 1011 = -5>
파이썬
a = 10 b = -10 # print bitwise right shift operator print('a>> 1 =', a>> 1) print('b>> 1 =', b>> 1)>

산출

a>> 1 = 5b>> 1 = -5>

파이썬 비트 왼쪽 시프트

숫자의 비트를 왼쪽으로 이동하고 결과적으로 오른쪽 빈 공간을 0으로 채웁니다. 숫자에 2의 거듭제곱을 곱하는 것과 비슷한 효과입니다.

  Example 1:   a = 5 = 0000 0101 (Binary) a << 1 = 0000 1010 = 10 a << 2 = 0001 0100 = 20   Example 2:   b = -10 = 1111 0110 (Binary) b << 1 = 1110 1100 = -20 b << 2 = 1101 1000 = -40>
파이썬
a = 5 b = -10 # print bitwise left shift operator print('a << 1 =', a << 1) print('b << 1 =', b << 1)>

산출:

a << 1 = 10 b << 1 = -20>

비트 연산자 오버로딩

연산자 오버로딩 미리 정의된 작동 의미를 넘어 확장된 의미를 부여하는 것을 의미합니다. 예를 들어 연산자 +는 두 개의 정수를 추가하고 두 문자열을 결합하고 두 목록을 병합하는 데 사용됩니다. 이는 '+' 연산자가 int 클래스와 str 클래스에 의해 오버로드되기 때문에 가능합니다. 동일한 내장 연산자나 함수가 다른 클래스의 객체에 대해 다른 동작을 나타내는 것을 눈치챘을 것입니다. 연산자 오버로딩 .

다음은 Bitwise 연산자 오버로딩의 간단한 예입니다.

파이썬
# Python program to demonstrate # operator overloading class Geek(): def __init__(self, value): self.value = value def __and__(self, obj): print('And operator overloaded') if isinstance(obj, Geek): return self.value & obj.value else: raise ValueError('Must be a object of class Geek') def __or__(self, obj): print('Or operator overloaded') if isinstance(obj, Geek): return self.value | obj.value else: raise ValueError('Must be a object of class Geek') def __xor__(self, obj): print('Xor operator overloaded') if isinstance(obj, Geek): return self.value ^ obj.value else: raise ValueError('Must be a object of class Geek') def __lshift__(self, obj): print('lshift operator overloaded') if isinstance(obj, Geek): return self.value << obj.value else: raise ValueError('Must be a object of class Geek') def __rshift__(self, obj): print('rshift operator overloaded') if isinstance(obj, Geek): return self.value>> obj.value else: raise ValueError('Geek 클래스의 객체여야 합니다') def __invert__(self): print('연산자 오버로드됨') return ~self.value # 드라이버의 코드 if __name__ == '__main__': a = Geek(10) b = Geek(12) print(a & b) print(a | b) print(a ^ b) print(a<< b) print(a>> b) 인쇄(~a)>

산출:

And operator overloaded 8 Or operator overloaded 14 Xor operator overloaded 8 lshift operator overloaded 40960 rshift operator overloaded 8 Invert operator overloaded -11>

메모: 연산자 오버로딩에 대해 더 알고 싶다면 여기를 클릭하세요 .