Python Bitweise Operatoren

Python-Bit-Operatoren werden verwendet, um bitweise Berechnungen an Ganzzahlen durchzuführen. Die Ganzzahlen werden in das Binärformat umgewandelt, und dann werden die Operationen bitweise durchgeführt, daher der Name „bitwise operators“. Python-Bit-Operatoren arbeiten nur mit Ganzzahlen, und das endgültige Ergebnis wird im Dezimalformat zurückgegeben. Python-Bit-Operatoren werden auch als binäre Operatoren bezeichnet.

Python-Bit-Operatoren

Es gibt 6 Bit-Operatoren in Python. Die nachstehende Tabelle gibt kurze Details zu ihnen.

Bitwise Operator Description Simple Example
& Bitwise AND Operator 10 & 7 = 2
Bitwise OR Operator
^ Bitwise XOR Operator 10 ^ 7 = 13
~ Bitwise Ones’ Compliment Operator ~10 = -11
<< Bitwise Left Shift operator 10<<2 = 40
>> Bitwise Right Shift Operator 10>>1 = 5

Lassen Sie uns diese Operatoren einzeln betrachten und verstehen, wie sie funktionieren.

1. Bitweise UND-Operator

Der Python bitweise UND-Operator gibt 1 zurück, wenn beide Bits 1 sind, andernfalls 0.

>>> 10&7
2
>>> 
Python Bitwise And Operator

2. Bitweise ODER-Operator

Der Python bitweise ODER-Operator gibt 1 zurück, wenn eines der Bits 1 ist. Wenn beide Bits 0 sind, wird 0 zurückgegeben.

>>> 10|7
15
>>> 
Python Bitwise Or Operator

3. Bitweiser XOR Operator

Der Python-Bitweiser XOR-Operator gibt 1 zurück, wenn eines der Bits 0 ist und das andere Bit 1 ist. Wenn beide Bits 0 oder 1 sind, gibt er 0 zurück.

>>> 10^7
13
>>> 
Python Bitwise XOR Operator

4. Bitweiser Einser-Komplement Operator

Das Einser-Komplement eines Wertes ‚A‘ in Python entspricht -(A+1).

>>> ~10
-11
>>> ~-10
9
>>> 
Python Bitwise Ones Complement Operator

5. Bitweiser Linksverschiebeoperator

Der Python-Bitweiser Linksverschiebeoperator verschiebt die Bits des linken Operanden um die angegebene Anzahl von Stellen im rechten Operanden nach links. Einfach ausgedrückt wird die binäre Zahl am Ende mit 0en ergänzt.

>>> 10 << 2
40
>>> 
Python Bitwise Left Shift Operator

6. Bitweiser Rechtsverschiebeoperator

Der Python-Rechtsschiebeoperator ist genau das Gegenteil des Linkschiebeoperators. Dann werden die Bits des linken Operanden für die angegebene Anzahl von Malen in Richtung rechte Seite verschoben. Vereinfacht ausgedrückt werden die Bits auf der rechten Seite entfernt.

>>> 10 >> 2
2
>>>  
Python Bitwise Right Shift Operator

Überladen von Python-Bitweise-Operatoren

Python unterstützt die Überladung von Operatoren. Es gibt verschiedene Methoden, die wir implementieren können, um bitweise Operatoren für unsere benutzerdefinierten Objekte zu unterstützen.

Bitwise Operator Method to Implement
& __and__(self, other)
^ __xor__(self, other)
~ __invert__(self)
<< __lshift__(self, other)
>> __rshift__(self, other)

Hier ist ein Beispiel für eine Überladung des bitweisen Operators für unser benutzerdefiniertes Objekt.

class Data:
    id = 0

    def __init__(self, i):
        self.id = i

    def __and__(self, other):
        print('Bitwise AND operator overloaded')
        if isinstance(other, Data):
            return Data(self.id & other.id)
        else:
            raise ValueError('Argument must be object of Data')

    def __or__(self, other):
        print('Bitwise OR operator overloaded')
        if isinstance(other, Data):
            return Data(self.id | other.id)
        else:
            raise ValueError('Argument must be object of Data')

    def __xor__(self, other):
        print('Bitwise XOR operator overloaded')
        if isinstance(other, Data):
            return Data(self.id ^ other.id)
        else:
            raise ValueError('Argument must be object of Data')

    def __lshift__(self, other):
        print('Bitwise Left Shift operator overloaded')
        if isinstance(other, int):
            return Data(self.id << other)
        else:
            raise ValueError('Argument must be integer')

    def __rshift__(self, other):
        print('Bitwise Right Shift operator overloaded')
        if isinstance(other, int):
            return Data(self.id >> other)
        else:
            raise ValueError('Argument must be integer')

    def __invert__(self):
        print('Bitwise Ones Complement operator overloaded')
        return Data(~self.id)

    def __str__(self):
        return f'Data[{self.id}]'


d1 = Data(10)
d2 = Data(7)

print(f'd1&d2 = {d1&d2}')
print(f'd1|d2 = {d1|d2}')
print(f'd1^d2 = {d1^d2}')
print(f'd1<<2 = {d1<<2}')
print(f'd1>>2 = {d1>>2}')
print(f'~d1 = {~d1}')

Ausgabe:

Bitwise AND operator overloaded
d1&d2 = Data[2]
Bitwise OR operator overloaded
d1|d2 = Data[15]
Bitwise XOR operator overloaded
d1^d2 = Data[13]
Bitwise Left Shift operator overloaded
d1<<2 = Data[40]
Bitwise Right Shift operator overloaded
d1>>2 = Data[2]
Bitwise Ones Complement operator overloaded
~d1 = Data[-11]

Wenn Sie nicht mit der neuen Zeichenkettenformatierung vertraut sind, lesen Sie bitte f-Strings in Python.

Zusammenfassung

Python-Bitweise-Operatoren werden hauptsächlich in mathematischen Berechnungen verwendet. Wir können auch spezifische Methoden implementieren, um bitweise Operatoren für unsere benutzerdefinierten Klassenimplementierungen zu unterstützen.

Source:
https://www.digitalocean.com/community/tutorials/python-bitwise-operators