Tracks
/
Python
Python
/
Lehrplan
/
Binär, Oktal und Hexadezimal
Bi

Binär, Oktal und Hexadezimal in Python

{one: "1 Übung", other: "%{count} Übungen"}

Über Binär, Oktal und Hexadezimal

Binär, Oktal und Hexadezimal (auch bekannt als Hex) sind verschiedene Zahlensysteme mit unterschiedlichen Basen. Binär hat die Basis 2, Oktal die Basis 8 und Hexadezimal die Basis 16. Normale Ganzzahlen haben in Python die Basis 10. Binär, Oktal und Hexadezimal sind alles Darstellungen von Ganzzahlen. Das heißt, sie stellen positive und negative Zahlen (einschließlich null) ohne Brüche oder Dezimalstellen dar und unterstützen alle Operationen, die wir mit Ganzzahlen durchführen können.

Binär

Binär ist ein Zahlensystem mit der Basis 2, das nur die Ziffern 0 und 1 verwendet. Es stellt üblicherweise die Zustände 0 („aus") und 1 („an") des elektrischen Flusses durch Transistoren und Schalter in Computern dar, ebenso wie die positiven und negativen Ladungen in magnetischen Speichermedien. Binär kann alle Ganzzahlen darstellen, die in der Basis 10 verwendet werden.

Ein Ausschnitt aus dem System zur Basis 2 sieht so aus, obwohl es unendlich weitergeht und nicht bei 128 aufhört:

128 64 32 16 8 4 2 1
2 ** 7 2 ** 6 2 ** 5 2 ** 4 2 ** 3 2 ** 2 2 ** 1 2 ** 0

Wenn wir also die Zahl 6 in Binär darstellen wollen, wäre das 110.

Stellenwert 4 2 1
Binärzahl 1 1 0

Und die Rechnung wäre: 4 + 2 + 0 = 6

Ein weiteres Beispiel: 19

Stellenwert 16 8 4 2 1
Binärzahl 1 0 0 1 1

Die Binärzahl wäre: 10011 Und die Rechnung wäre: 16 + 0 + 0 + 2 + 1 = 19

Binär in Python

In Python können wir binäre Literale mit dem Präfix 0b darstellen. Wenn wir 0b10011 schreiben, interpretiert Python es als Binärzahl und wandelt es in die Basis 10 um.

>>> 0b10011
19

>>> type(0b10011)
<class 'int'>

Binär ist in Python nur eine andere Art, eine Ganzzahl zu schreiben, und daher ist die binäre Darstellung eine Ganzzahl für alle mathematischen Operationen.

Wenn du eine Zahl mit dem Präfix 0b schreibst, die nicht im Binärsystem ist, wird ein SyntaxError ausgelöst.

Traceback (most recent call last):
  File "c:\binary.py", line 1, in <module>
    0b10211
SyntaxError: invalid digit '2' in binary literal

Rechnen mit Binärzahlen

Da Binärzahlen Ganzzahlen sind, können wir mit ihnen alle Operationen durchführen, die wir auch mit Ganzzahlen durchführen können.

# addition
>>> 0b10011 + 0b10011
38

# multiplication
>>> 0b10011 * 0b10011
361

Wir können Operationen auch zwischen binären und ganzzahligen Darstellungen durchführen. Es gelten jedoch die üblichen mathematischen Operatorregeln: Die Division zweier Binärzahlen oder Ganzzahlen gibt eine float zurück, auch wenn die Division keinen Dezimalanteil ergibt.

>>> 0b10011 + 19
38

>>> 0b10011/0b10011
1.0

>>> 0b10011/3
6.333333333333333

Umwandeln in und aus der binären Darstellung

Python wandelt ein binäres Literal automatisch in int um. Um einen int in eine binäre Darstellung umzuwandeln, verwendest du die eingebaute Funktion [bin()][bin]. bin() gibt einen str des binären Äquivalents mit dem Präfix 0b zurück.

>>> bin(19)
'0b10011'

Um ein binäres Literal in eine Ganzzahl umzuwandeln, können wir die eingebaute Funktion int() verwenden und einen String der binären Darstellung sowie ein Basis-Argument übergeben:

>>> int("0b10011", 2)
19

Wenn du die falsche Basis angibst (oder eine ungültige binäre Darstellung), wird ein ValueError ausgelöst:

Traceback (most recent call last):
  File "c:\binary.py", line 4, in <module>
    int("0b10011", 3)
ValueError: invalid literal for int() with base 3: '0b10011'

Binäre Methoden

Es gibt auch einige spezielle Methoden, die wir auf Binärzahlen anwenden können.

<int>.bit_length() gibt die Anzahl der Bits zurück, die benötigt werden, um die Zahl darzustellen:

>>> 0b11011.bit_length()
5

<int>.bit_count() gibt die Anzahl der Einsen in der Binärzahl zurück. Zum Beispiel gibt bit_count() für '0b11011' den Wert 4 zurück:

>>> 0b11011.bit_count()
4
Note

Wenn du lokal arbeitest, benötigt bit_count() mindestens Python 3.10. Der Exercism-Online-Editor unterstützt derzeit alle Funktionen bis Python 3.11.

Oktal

Oktal ist ein Zahlensystem mit der Basis 8. Es verwendet die Ziffern 0, 1, 2, 3, 4, 5, 6 und 7.

In Python können wir Oktalzahlen mit dem Präfix 0o darstellen. Wie bei Binär wandelt Python eine Oktaldarstellung automatisch in einen int um.

>>> 0o123
83

Wie bei Binär sind Oktalzahlen Ganzzahlen und unterstützen alle Ganzzahloperationen. Wenn du einer Zahl, die nicht im Oktalsystem ist, das Präfix 0o voranstellst, wird ein SyntaxError ausgelöst.

Umwandeln in und aus der Oktaldarstellung

Um einen int in eine Oktaldarstellung umzuwandeln, kannst du die eingebaute Funktion [oct()][oct] verwenden. Sie funktioniert ähnlich wie die Funktion bin() und gibt einen String zurück:

>>> oct(83)
'0o123'

Um eine Oktalzahl in eine Ganzzahl umzuwandeln, können wir die Funktion int() verwenden und eine String-Darstellung im Oktalsystem sowie die Basis (8) als Argumente übergeben:

>>> int("0o123", 8)
83

Wie bei Binär wird ein ValueError ausgelöst, wenn du die falsche Basis angibst.

Hexadezimal

Hexadezimal ist ein Zahlensystem mit der Basis 16. Es verwendet die Ziffern 0 bis 9 und die Buchstaben A, B, C, D, E und F. A ist 10, B ist 11, C ist 12, D ist 13, E ist 14 und F ist 15.

Wir können Hexadezimalzahlen in Python mit dem Präfix 0x darstellen. Wie bei Binär und Oktal wandelt Python hexadezimale Literale automatisch in int um.

>>> 0x123
291

Wie bei Binär und Oktal sind hexadezimale Literale Ganzzahlen, und du kannst mit ihnen alle Ganzzahloperationen durchführen. Wenn du einer Zahl, die nicht hexadezimal ist, das Präfix 0x voranstellst, wird ein SyntaxError ausgelöst.

Umwandeln in und aus der hexadezimalen Darstellung

Um einen int in eine hexadezimale Darstellung umzuwandeln, kannst du die eingebaute Funktion [hex()][hex] verwenden. Sie funktioniert ähnlich wie die Funktion bin() und gibt einen String zurück:

>>> hex(291)
'0x123'

Um eine hexadezimale Darstellung in eine Ganzzahl umzuwandeln, können wir die Funktion int() verwenden und einen hexadezimalen String sowie die Basis (16) als Argumente übergeben:

>>> int("0x123", 16)
291

Wie bei Binär und Oktal wird ein ValueError ausgelöst, wenn du die falsche Basis angibst.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab