Inhaltsverzeichnis

Binärzahl-Operationen mit Python

Umwandlung Binär-Dezimal

Nehmen wir b = '101010' als Beispiel. Jede Ziffer in diesem String steht an einer bestimmten Position:

Position 0 1 2 3 4 5
Ziffer 1 0 1 0 1 0

Um die Binärzahl in eine Dezimalzahl umzurechnen, müssen wir potenzieren: $$1 \cdot 2^\color{red}{5} + 0 \cdot 2^\color{red}{4} + 1 \cdot 2^\color{red}{3} + 0 \cdot 2^\color{red}{2} + 1 \cdot 2^\color{red}{1} + 0 \cdot 2^\color{red}{0}$$

Zu jeder Ziffer gehört also die passende Zweierpotenz:

Position 0 1 2 3 4 5
Ziffer 1 0 1 0 1 0
Exponent 5 4 3 2 1 0
Potenz 32 16 8 4 2 1

Die Schwierigkeit bei diesem Code ist, dass Position und Exponent genau gegenteilig sind: Die Position startet bei $0$ und zählt hoch, der Exponent startet bei $5$ und zählt herunter.

Dieses Problem kann man unterschiedlich lösen. Zwei mögliche Ansätze sind:

  1. Zwei separate Variablen: Eine für die Position und eine für den Exponenten.
  2. Binärstring umkehren, also aus '101010' wird '010101': Jetzt stimmen Position und Exponent überein. Hier hat es Ideen.
  3. Das Zwischenresultat wird fortlaufend mit 2 multipliziert.

Lösung

Umwandlung Dezimal-Binär

Der Restwertalgorithmus wird im Dossier erklärt: Wir bilden fortlaufend den Rest und den Ganzzahl-Quotienten. Der Algorithmus funktioniert übrigens für alle Basen!

Lösung

Binär-Addition

Umsetzungsidee:

Lösung

Binär-Subtraktion

Lösung

Ausprobieren

Kopiere alle Funktionen oben in die gleiche Python-Datei. Überprüfe danach die Funktionsweise:

a_dec = 42 b_dec = 19 a_bin = decimal_to_binary(a_dec) b_bin = decimal_to_binary(b_dec) difference_bin = binary_subtraction(a_bin, b_bin, 8) difference_dec = binary_to_decimal(difference_bin) print(f"{a_dec} - {b_dec} = {a_bin} - {b_bin} = {difference_bin} = {difference_dec}")

Resultat:

42 - 19 = 101010 - 10011 = 00010111 = 23