Bit-Operationen in Python
Anzeige Hier werben
Neben dem Hexadezimal- und dem Oktalsystem ist in der Informatik das Dualsystem von großer Bedeutung. Das Dualsystem, oder auch Binärsystem, ist ein Zahlensystem mit der Basis 2. Eine ganze Zahl wird also als Folge von Einsen und Nullen dargestellt. In Python existiert kein Literal, mit dem Zahlen in Dualschreibweise direkt verwendet werden könnten, jedoch sind für die Datentypen int und long einige Operatoren definiert, die sich explizit auf die binäre Darstellung der Zahl beziehen:
| Operator |
Ergebnis |
| x & y |
Bitweises UND von x und y (AND) |
| x | y | Bitweises nicht ausschließendes ODER von x und y (OR) |
| x ^ y | Bitweises ausschließendes ODER von x und y (XOR) |
| ~x | Bitweises Komplement von x |
| x << n | Bitverschiebung um n Stellen nach links |
| x >> n | Bitverschiebung um n Stellen nach rechts |
Auch hier sind erweiterte Zuweisungen mithilfe der folgenden Operatoren möglich:
| Operator |
Entsprechung |
| x &= y |
x = x & y |
| x |= y | x = x | y |
| x ^= y | x = x ^ y |
| x <<= n | x = x << n |
| x >>= n | x = x >> n |
Da vielleicht nicht jedem unmittelbar klar ist, was die einzelnen Operationen bewirken, möchten wir sie im Folgenden im Detail besprechen. Das bitweise UND zweier Zahlen wird gebildet, indem beide Zahlen in ihrer Binärdarstellung Bit für Bit miteinander verknüpft werden. Die resultierende Zahl hat in ihrer Binärdarstellung genau da eine 1, wo die jeweiligen Bits der Operanden übereinstimmen, und es hat da eine 0, wo sich diese unterscheiden. Dies soll durch die folgende Grafik veranschaulicht werden:
Im interaktiven Modus von Python probieren wir aus, ob das bitweise UND mit den in der Grafik gewählten Operanden tatsächlich das erwartete Ergebnis zurückgibt:
>>> 106 & 12
8
Diese Prüfung des Ergebnisses werden wir nicht für jede Operation einzeln durchführen. Um allerdings mit den bitweisen Operatoren vertrauter zu werden, lohnt es sich, hier ein wenig zu experimentieren.
Das bitweise ODER zweier Zahlen wird gebildet, indem beide Zahlen in ihrer Binärdarstellung Bit für Bit miteinander verglichen werden. Die resultierende Zahl hat in ihrer Binärdarstellung genau da eine 1, wo mindestens eines der jeweiligen Bits der Operanden 1 ist. Abbildung 8.2 veranschaulicht dies.
Das bitweise ausschließende ODER zweier Zahlen wird gebildet, indem beide Zahlen in ihrer Binärdarstellung Bit für Bit miteinander verglichen werden. Die resultierende Zahl hat in ihrer Binärdarstellung genau da eine 1, wo sich die jeweiligen Bits der Operanden voneinander unterscheiden, und da eine 0, wo sie gleich sind. Dies wird von Abbildung 8.3 veranschaulicht.
Anmerkung
Das ist sinnvoll, da man zur Darstellung negativer Zahlen in abgeschlossenen Zahlenräumen
das sogenannte Zweierkomplement verwendet. Dieses erhält man, indem man zum Einerkomplement
1 addiert.
Also: –x = Zweierkomplement von x = ~x + 1
Daraus folgt: ~ x = –x – 1
Das bitweise Komplement bildet das sogenannte Einerkomplement einer Dualzahl, das der Negation aller vorkommenden Bits entspricht. In Python ist dies auf Bitebene nicht möglich, da eine ganze Zahl in ihrer Länge unbegrenzt ist und das Komplement immer in einem abgeschlossenen Zahlenraum gebildet werden muss. Deswegen wird die eigentliche Bit-Operation zur arithmetischen Operation und folgendermaßen definiert [Siehe Anmerkung]:
~ x = –x – 1
Bei der Bitverschiebung wird die Bitfolge in der binären Darstellung des ersten Operanden um die durch den zweiten Operanden gegebene Anzahl Stellen nach links bzw. rechts verschoben. Die entstandene Lücke wird mit Nullen gefüllt. Die beiden folgenden Abbildungen veranschaulichen eine Verschiebung um zwei Stellen nach links bzw. nach rechts.
Die in der Bitdarstellung entstehenden Lücken auf der rechten bzw. linken Seite werden mit Nullen aufgefüllt.
Buchhinweis
Dieser Artikel stammt aus dem Buch "Python – Das umfassende Handbuch" von Peter Kaiser und Johannes Ernesti und wurde uns von Galileo Design zur Verfügung gestellt hat. Das Buch kann über die Webseite des Galileo Verlag bestellt werden
Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 2 Personen an der Seite "Bit-Operationen in Python" mitgewirkt.
Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Bit-Operationen in Python" hier bearbeiten.
-
Meine Schwerpunkte liegen im Bereich Grafikdesign, SEO und Management. Seit sieben Jahren bin ich als Geschäftsführer der Team23 GbR tätig, die Webdesign in Augsburg anbietet, sowie Webmasterpro.de betreut.
-
Ich bin Schüler eines Gymnasiums und beschäftige mich in meiner Freizeit seit vielen Jahren mit HTML- und CSS-Programmierung. Außerdem interessiere ich mich für PHP (WordPress, Drupal, ...), Ruby und Ruby on Rails.







Komplette Inhalte von Galileo Press auf WMP? Sinnvoll? Eher nein.
Warum schaltet ihr denn jetzt Artikel frei, die es im Internet 1:1 frei zum Abruf gibt? Wer Python durch Galileo erlernen möchte, kann sich hier das ganze Buch reinziehen:
http://www.galileocomputing.de/openbook/python/
Das ist doch double Content, oder? Wird man dadurch nicht durch Google abgestraft? Also ich finde diese Art an Content zu kommen echt unterste Schublade ... meine Meinung.
Re: Komplette Inhalte von Galileo Press auf WMP? Sinnvoll? Eher nein.
es wurde ja extra darauf verwiesen. ich denke nicht, dass fabian da was unüberlegtes macht.