**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. Zwei 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
Umsetzungsidee:
- Beide Strings paarweise von rechts nach links durchlaufen.
- An jeder Position das Bit aus
aundbsowie einen allfälligen Übertrag addieren. - 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
Ausprobieren
Kopiere alle Funktionen oben in die gleiche Python-Datei. Überprüfe danach die Funktionsweise:
Resultat:
42 - 19 = 101010 - 10011 = 00010111 = 23