Python Bitwise Operatoren

Python bitgewijze operatoren worden gebruikt voor het uitvoeren van bitgewijze berekeningen op gehele getallen. De getallen worden omgezet naar binaire formaat en vervolgens worden bewerkingen bit voor bit uitgevoerd, vandaar de naam bitgewijze operatoren. Python bitgewijze operatoren werken alleen op gehele getallen en de uiteindelijke uitvoer wordt weergegeven in decimale notatie. Python bitgewijze operatoren worden ook wel binaire operatoren genoemd.

Python Bitwise Operators

Er zijn 6 bitgewijze operatoren in Python. De onderstaande tabel geeft korte details over hen.

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

Laten we deze operatoren één voor één bekijken en begrijpen hoe ze werken.

1. Bitgewijze EN-operator

Python bitgewijze en-operator geeft 1 terug als beide bits 1 zijn, anders 0.

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

2. Bitgewijze OF-operator

Python bitgewijze of-operator geeft 1 terug als een van de bits 1 is. Als beide bits 0 zijn, geeft het 0 terug.

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

3. Bitwijze XOR-operator

De bitwijze XOR-operator in Python geeft 1 terug als één van de bits 0 is en de andere bit 1 is. Als beide bits 0 of 1 zijn, geeft het 0 terug.

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

4. Bitwijze complementeer-operator

De complementeer-operator van een getal ‘A’ in Python is gelijk aan -(A+1).

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

5. Bitwijze linksverschuivingsoperator

De bitwijze linksverschuivingsoperator in Python verschuift de bits van het linker operand naar links voor het opgegeven aantal keren in het rechter operand. In eenvoudige bewoordingen wordt het binaire getal aangevuld met 0’en aan het einde.

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

6. Bitwijze rechtsverschuivingsoperator

De rechtsverschuivingsoperator van Python is precies het tegenovergestelde van de linksverschuivingsoperator. Dan worden de bits van de linkerkantoperand naar de rechterkant verplaatst voor het opgegeven aantal keren. In eenvoudige bewoordingen worden de bits aan de rechterkant verwijderd.

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

Overbelasting van de bitgewijze operator in Python

Python ondersteunt operatoroverbelasting. Er zijn verschillende methoden die we kunnen implementeren om bitgewijze operatoren te ondersteunen voor onze aangepaste objecten.

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

Hier is een voorbeeld van overbelasting van een bitgewijze operator voor ons aangepaste object.

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}')

Output:

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]

Als u niet bekend bent met de nieuwe string formattering, lees dan f-strings in Python.

Samenvatting

Bitgewijze operatoren in Python worden voornamelijk gebruikt in wiskundige berekeningen. We kunnen specifieke methoden implementeren om bitgewijze operatoren te ondersteunen voor onze aangepaste klassenimplementaties ook.

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