Operatory bitowe Pythona

Operatory bitowe Pythona

Operatorzy służą do wykonywania operacji na wartościach i zmiennych. Są to specjalne symbole, które wykonują obliczenia arytmetyczne i logiczne. Wartość, na której operuje operator, nazywana jest operandem.

Operatory bitowe Pythona

Operatory bitowe Pythona służą do wykonywania obliczeń bitowych na liczbach całkowitych. Liczby całkowite są najpierw konwertowane na binarne, a następnie wykonywane są operacje na każdym bicie lub odpowiedniej parze bitów, stąd nazwa operatorów bitowych. Wynik jest następnie zwracany w formacie dziesiętnym.

Notatka: Operatory bitowe Pythona działają tylko na liczbach całkowitych.


OPERATOR NAZWA OPIS SKŁADNIA

Bitowy operator AND

& Bitowe AND Bit wyniku 1, jeśli oba bity argumentu mają wartość 1; w przeciwnym razie wynikiem będzie bit 0. x i y

Bitowy operator OR

| Bitowe LUB Bit wyniku 1, jeśli którykolwiek z bitów operandu ma wartość 1; w przeciwnym razie wynikiem będzie bit 0. x | I

Bitowy operator XOR

^ Bitowy XOR Bit wyniku 1, jeśli którykolwiek z bitów operandu ma wartość 1, ale nie oba, w przeciwnym razie wynikiem jest bit 0. x^y

Bitowy operator NOT

~ Bitowe NIE

Odwraca poszczególne bity.

~x

Bitowe przesunięcie w prawo w Pythonie

>> Bitowe przesunięcie w prawo

Wartość lewego operandu przesuwa się w prawo o liczbę bitów

określony przez prawy operand.

x>>

Bitowe przesunięcie w lewo w Pythonie

< < Bitowe przesunięcie w lewo

Wartość lewego operandu przesuwa się w lewo o liczbę bitów

określony przez prawy operand.

x < <

Przyjrzyjmy się każdemu operatorowi jeden po drugim.

Operator bitowy AND

The Python Bitowe ORAZ (&) operator przyjmuje jako parametry dwa wzorce bitów o równej długości. Porównywane są dwubitowe liczby całkowite. Jeśli bity w porównywanych pozycjach wzorców bitów mają wartość 1, wówczas bit wynikowy ma wartość 1. Jeśli nie, wynosi 0.

Przykład: Weź dwie wartości bitowe X i Y, gdzie X = 7 = (111) 2 i Y = 4 = (100) 2 . Weź Bitwise oraz X i Y

Notatka: Tutaj (111) 2 reprezentują liczbę binarną.

Pyton
a = 10 b = 4 # Print bitwise AND operation print('a & b =', a & b) 

Wyjście

a & b = 0 

Operator bitowy OR

The Python Bitowe LUB (|) Operator przyjmuje jako granice dwa projekty bitów o równoważnej długości; jeśli dwa bity w pozycji, na którą patrzymy, mają wartość 0, następny bit ma wartość zero. Jeśli nie, to 1.

Przykład: Weź dwie wartości bitowe X i Y, gdzie X = 7 = (111) 2 i Y = 4 = (100) 2 . Weź bitowy OR z obu X, Y

Pyton
a = 10 b = 4 # Print bitwise OR operation print('a | b =', a | b) 

Wyjście

a | b = 14 

Bitowy operator XOR

The Operator bitowy XOR (^) Pythona znany również jako wyłączny operator OR, służy do wykonywania operacji XOR na dwóch operandach. XOR oznacza wyłączność lub i zwraca wartość true wtedy i tylko wtedy, gdy dokładnie jeden z operandów jest prawdziwy. W kontekście operacji bitowych porównuje odpowiednie bity dwóch operandów. Jeśli bity są różne, zwraca 1; w przeciwnym razie zwraca 0.

Przykład: Weź dwie wartości bitowe X i Y, gdzie X = 7= (111)2 i Y = 4 = (100)2 . Weź Bitwise oraz X i Y

Pyton
a = 10 b = 4 # print bitwise XOR operation print('a ^ b =', a ^ b) 

Wyjście

a ^ b = 14 

Bitowy operator NOT

Powyższe trzy operatory bitowe są operatorami binarnymi, co wymaga do działania dwóch operandów. Jednak w przeciwieństwie do innych operator ten działa tylko z jednym operandem.

The Operator bitowy nie (~) języka Python działa z pojedynczą wartością i zwraca jej uzupełnienie. Oznacza to, że przełącza wszystkie bity wartości, przekształcając 0 bitów na 1 i 1 bit na 0, co daje uzupełnienie liczby binarnej do jedynki.

Przykład : Weź dwie wartości bitowe X i Y, gdzie X = 5= (101)2 . Weź Bitwise NOT z X.

Pyton
a = 10 b = 4 # Print bitwise NOT operation print('~a =', ~a) 

Wyjście

~a = -11 

Przesunięcie bitowe

Operatory te służą do przesuwania bitów liczby w lewo lub w prawo, odpowiednio mnożąc lub dzieląc liczbę przez dwa. Można ich użyć, gdy musimy pomnożyć lub podzielić liczbę przez dwa.

Pyton Bitowe przesunięcie w prawo

Przesuwa bity liczby w prawo i w rezultacie wypełnia 0 w pustych przestrzeniach (wypełnia 1 w przypadku liczby ujemnej). Podobny efekt jak dzielenie liczby przez pewną potęgę dwójki.

  Example 1:   a = 10 = 0000 1010 (Binary) a>> 1 = 0000 0101 = 5 Przykład 2: a = -10 = 1111 0110 (binarnie) a>> 1 = 1111 1011 = -5 
Pyton
a = 10 b = -10 # print bitwise right shift operator print('a>> 1 =', a>> 1) print('b>> 1 =', b>> 1) 

Wyjście

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

Pyton Bitowe przesunięcie w lewo

Przesuwa bity liczby w lewo i w rezultacie wypełnia 0 w pustych przestrzeniach w prawo. Podobny efekt jak pomnożenie liczby przez pewną potęgę dwójki.

  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 
Pyton
a = 5 b = -10 # print bitwise left shift operator print('a  < < 1 =', a  < < 1) print('b  < < 1 =', b  < < 1) 

Wyjście:

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

Przeciążenie operatora bitowego

Przeciążenie operatora oznacza nadanie rozszerzonego znaczenia wykraczającego poza ich z góry określone znaczenie operacyjne. Na przykład operator + służy do dodawania dwóch liczb całkowitych, a także do łączenia dwóch ciągów znaków i łączenia dwóch list. Jest to osiągalne, ponieważ operator „+” jest przeciążony przez klasy int i str. Być może zauważyłeś, że ten sam wbudowany operator lub funkcja wykazuje odmienne zachowanie dla obiektów różnych klas. Jest to tzw Przeciążenie operatora .

Poniżej znajduje się prosty przykład przeciążenia operatora Bitwise.

Pyton
# 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('Musi być obiektem klasy Geek') def __invert__(self): print('Operator odwracania przeciążony') return ~self.value # Kod sterownika jeśli __name__ == '__main__': a = Geek(10) b = Geek(12) print(a i b) print(a | b) print(a ^ b) print(a < < b) print(a>> b) print(~a) 

Wyjście:

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

Notatka: Aby dowiedzieć się więcej o przeciążeniu operatora Kliknij tutaj .