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. 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.

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

Die Addition von Binärzahlen erfolgt wie die schriftliche Addition von Dezimalzahlen: Jede Stelle wird für sich addiert, dabei ergibt sich der Wert für diese Stelle im Resultat sowie der Übertrag („Behalte“) für die nächste Stelle. Ein Übertrag erfolgt, sobald die Stellensumme die Zahl 2 erreicht.

Umsetzungsidee:

  • Beide Strings paarweise von rechts nach links durchlaufen.
  • An jeder Position das Bit aus a und b sowie einen allfälligen Übertrag addieren.
    • Achtung: Die einzelnen Positionen eines Strings sind die Buchstaben '0' oder '1', nicht die Zahlen 0 oder 1. Wandle sie mit int() in Zahlen um!
  • Das Resultat-Bit an der Position ist 1, wenn die Summe 1 oder 3 ist, sonst 0.
    • Tipp: also genau das Resultat von summe % 2
  • Der Übertrag auf die nächste Stelle ist 1 wenn die Summe 2 oder 3 ist.
    • Also genau dem Resultat von …?

Für die Subtraktion im Binärsystem wird das Zweierkomplement des Subtrahends addiert. Wir benötigen also Code für das Berechnen des Zweierkomplements:

  1. Auffüllen mit Nullen auf die gewünschte Anzahl Bits
  2. Invertieren
  3. "1" addieren mit Binär-Addition

Der Code aus der vorherigen Aufgabe wird für die Addition benötigt.

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
  • gf_informatik/zahlensysteme/binary_solutions.1777822551.txt.gz
  • Zuletzt geändert: 2026-05-03 15:35
  • von hof