**Dies ist eine alte Version des Dokuments!**
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. Mögliche Ansätze sind:
- Zwei separate Variablen: Eine für die Position und eine für den Exponenten.
- Binärstring umkehren, also aus
'101010'wird'010101': Jetzt stimmen Position und Exponent überein. Hier hat es Ideen. - Das Zwischenresultat wird fortlaufend mit 2 multipliziert.
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!
Binär-Addition
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
aundbsowie einen allfälligen Übertrag addieren.- Achtung: Die einzelnen Positionen eines Strings sind die Buchstaben
'0'oder'1', nicht die Zahlen0oder1. Wandle sie mitint()in Zahlen um!
- Das Resultat-Bit an der Position ist
1, wenn die Summe1oder3ist, sonst0.- Tipp: also genau das Resultat von
summe % 2…
- Der Übertrag auf die nächste Stelle ist
1wenn die Summe2oder3ist.- Also genau dem Resultat von …?
Binär-Subtraktion
Für die Subtraktion im Binärsystem wird das Zweierkomplement des Subtrahends addiert. Wir benötigen also Code für das Berechnen des Zweierkomplements:
- Auffüllen auf die gewünschte Anzahl Bits
- Invertieren
"1"addieren mit Binär-Addition
Der Code aus der vorherigen Aufgabe wird für die Addition benötigt.
Ausprobieren
Kopiere alle Funktionen oben in die gleiche Python-Datei. Überprüfe danach die Funktionsweise:
Resultat:
42 - 19 = 101010 - 10011 = 00010111 = 23