Python - Bitweise Operatoren
Hallo daar, zukünftige Python-Zauberer! Heute werden wir auf eine aufregende Reise in die Welt der bitweisen Operatoren aufbrechen. Ich weiß, was ihr vielleicht denkt: "Bitweise Operatoren? Das klingt nach etwas, das nur Informatiker interessiert!" Aber glaubt mir, das Verständnis dieser Operatoren kann unglaublich nützlich und sogar Spaß machen! Lasst uns einsteigen und die Geheimnisse von Bits und Bytes gemeinsam enträtseln.
Python Bitweise Operatoren
Bitweise Operatoren sind spezielle Operatoren, die auf den binären Darstellungen von Zahlen arbeiten. Sie manipulieren einzelne Bits, die die kleinsten Daten Einheiten in der Datenverarbeitung sind. Stellt euch Bits als kleine Schalter vor, die entweder an (1) oder aus (0) sein können.
Bevor wir uns in jede dieser Operatoren vertiefen, werfen wir einen kurzen Blick auf alle bitweisen Operatoren, die in Python verfügbar sind:
Operator | Name | Beschreibung |
---|---|---|
& | UND | Setzt jedes Bit auf 1, wenn beide Bits auf 1 gesetzt sind |
| | ODER | Setzt jedes Bit auf 1, wenn eines der beiden Bits auf 1 gesetzt ist |
^ | XOR | Setzt jedes Bit auf 1, wenn nur eines der beiden Bits auf 1 gesetzt ist |
~ | NICHT | Invertiert alle Bits |
<< | Linksshift | Schiebt nach links, indem Nullen von rechts hereingepresst werden |
>> | Rechtsshift | Schiebt nach rechts, indem Kopien des linkenmosten Bits von links hereingepresst werden |
Nun untersuchen wir jeden dieser Operatoren im Detail.
Python Bitweiser UND-Operator (&)
Der bitweise UND-Operator (&) vergleicht jedes Bit des ersten Operanden mit dem entsprechenden Bit des zweiten Operanden. Wenn beide Bits auf 1 gesetzt sind, wird das entsprechende Ergebnisbit auf 1 gesetzt. Andernfalls wird das entsprechende Ergebnisbit auf 0 gesetzt.
Sehen wir uns ein Beispiel an:
a = 5 # binär: 0101
b = 3 # binär: 0011
ergebnis = a & b
print(f"{a} & {b} = {ergebnis}") # Ausgabe: 5 & 3 = 1
In diesem Beispiel führen wir eine bitweise UND-Operation zwischen 5 (0101 in binär) und 3 (0011 in binär) durch. Das Ergebnis ist 1 (0001 in binär).
So funktioniert es:
0101 (5)
& 0011 (3)
----
0001 (1)
Wie ihr sehen könnt, ist nur das rechteste Bit in beiden Zahlen auf 1 gesetzt, daher ist nur dieses Bit im Ergebnis auf 1 gesetzt.
Python Bitweiser ODER-Operator (|)
Der bitweise ODER-Operator (|) vergleicht jedes Bit des ersten Operanden mit dem entsprechenden Bit des zweiten Operanden. Wenn eines der Bits auf 1 gesetzt ist, wird das entsprechende Ergebnisbit auf 1 gesetzt. Andernfalls wird das entsprechende Ergebnisbit auf 0 gesetzt.
Hier ist ein Beispiel:
a = 5 # binär: 0101
b = 3 # binär: 0011
ergebnis = a | b
print(f"{a} | {b} = {ergebnis}") # Ausgabe: 5 | 3 = 7
In diesem Fall führen wir eine bitweise ODER-Operation zwischen 5 und 3 durch. Das Ergebnis ist 7 (0111 in binär).
So funktioniert es:
0101 (5)
| 0011 (3)
----
0111 (7)
Das Ergebnis hat eine 1 dort, wo eine der ursprünglichen Zahlen eine 1 hatte.
Python Bitweiser XOR-Operator (^)
Der bitweise XOR (exklusives ODER) Operator (^) vergleicht jedes Bit des ersten Operanden mit dem entsprechenden Bit des zweiten Operanden. Wenn die Bits unterschiedlich sind, wird das entsprechende Ergebnisbit auf 1 gesetzt. Wenn die Bits gleich sind, wird das entsprechende Ergebnisbit auf 0 gesetzt.
Sehen wir uns ein Beispiel an:
a = 5 # binär: 0101
b = 3 # binär: 0011
ergebnis = a ^ b
print(f"{a} ^ {b} = {ergebnis}") # Ausgabe: 5 ^ 3 = 6
Hier führen wir eine bitweise XOR-Operation zwischen 5 und 3 durch. Das Ergebnis ist 6 (0110 in binär).
So funktioniert es:
0101 (5)
^ 0011 (3)
----
0110 (6)
Das Ergebnis hat eine 1 dort, wo die Bits in den ursprünglichen Zahlen unterschiedlich waren.
Python Bitweiser NICHT-Operator (~)
Der bitweise NICHT-Operator (~) ist ein unärer Operator (er nimmt nur einen Operanden), der die Bits seines Operanden umschaltet. Jede 0 wird zu 1 und jede 1 wird zu 0.
Hier ist ein Beispiel:
a = 5 # binär: 0101
ergebnis = ~a
print(f"~{a} = {ergebnis}") # Ausgabe: ~5 = -6
Ihr fragt euch vielleicht, warum das Ergebnis -6 ist. Das liegt daran, dass Python zwei-Komplement zur Darstellung negativer Zahlen verwendet. Beim zwei-Komplement repräsentiert das linkeste Bit das Vorzeichen (0 für positiv, 1 für negativ).
Hier ist, was unter der Haube passiert:
00000101 (5)
~
11111010 (-6 im zwei-Komplement)
Python Bitweiser Linksshift-Operator (<<)
Der bitweise Linksshift-Operator (<<) schiebt die Bits des ersten Operanden nach links um die durch den zweiten Operanden angegebenen Plätze. Neue Bits auf der rechten Seite werden mit 0en gefüllt.
Sehen wir uns ein Beispiel an:
a = 5 # binär: 0101
b = 1
ergebnis = a << b
print(f"{a} << {b} = {ergebnis}") # Ausgabe: 5 << 1 = 10
In diesem Fall schieben wir die Bits von 5 um 1 Position nach links. Das Ergebnis ist 10 (1010 in binär).
So funktioniert es:
0101 (5)
Nach links schieben um 1
1010 (10)
Jeder Linksshift multipliziert effektiv die Zahl mit 2.
Python Bitweiser Rechtsshift-Operator (>>)
Der bitweise Rechtsshift-Operator (>>) schiebt die Bits des ersten Operanden nach rechts um die durch den zweiten Operanden angegebenen Plätze. Bei positiven Zahlen werden neue Bits auf der linken Seite mit 0en gefüllt.
Hier ist ein Beispiel:
a = 5 # binär: 0101
b = 1
ergebnis = a >> b
print(f"{a} >> {b} = {ergebnis}") # Ausgabe: 5 >> 1 = 2
Hier schieben wir die Bits von 5 um 1 Position nach rechts. Das Ergebnis ist 2 (0010 in binär).
So funktioniert es:
0101 (5)
Nach rechts schieben um 1
0010 (2)
Jeder Rechtsshift teilt effektiv die Zahl durch 2 (auf den nächsten ganzen Integer heruntergerundet).
Und das ist es, Leute! Wir haben die Reise durch die Welt der bitweisen Operatoren in Python unternommen. Diese Operatoren mögen zuerst etwas abstrakt erscheinen, aber sie sind unglaublich leistungsfähige Werkzeuge, besonders wenn ihr mit niedrigeren Operationen arbeitet oder euer Code für die Leistung optimieren möchtet.
Denkt daran, Übung macht den Meister. Versucht euch mit diesen Operatoren rumzuspielen, experimentiert mit verschiedenen Zahlen und seht, welche Ergebnisse ihr bekommt. Bevor ihr es wischt, werdet ihr Bits wie ein Profi manipulieren!
Happy coding, und möge das Bit immer in eurem Sinne sein!
Credits: Image by storyset