Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:zahlensysteme:binary_solutions [2026-04-21 06:02] – [Binär-Subtraktion] hof | gf_informatik:zahlensysteme:binary_solutions [2026-05-25 05:20] (aktuell) – hof | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ## Binärzahl-Operationen mit Python | ## Binärzahl-Operationen mit Python | ||
| - | < | + | |
| ### Umwandlung Binär-Dezimal | ### Umwandlung Binär-Dezimal | ||
| Zeile 18: | Zeile 18: | ||
| 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. | 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. | + | Dieses Problem kann man unterschiedlich lösen. |
| 1. **Zwei separate Variablen**: | 1. **Zwei separate Variablen**: | ||
| Zeile 24: | Zeile 24: | ||
| 3. Das Zwischenresultat wird **fortlaufend mit 2 multipliziert**. | 3. Das Zwischenresultat wird **fortlaufend mit 2 multipliziert**. | ||
| - | < | + | < |
| <script type=" | <script type=" | ||
| def binary_to_decimal(b): | def binary_to_decimal(b): | ||
| Zeile 46: | Zeile 46: | ||
| print(binary_to_decimal(" | print(binary_to_decimal(" | ||
| </ | </ | ||
| - | </ | + | </ |
| Zeile 53: | Zeile 53: | ||
| Der {{gf_informatik: | Der {{gf_informatik: | ||
| - | < | + | < |
| <script type=" | <script type=" | ||
| def decimal_to_binary(d): | def decimal_to_binary(d): | ||
| Zeile 75: | Zeile 75: | ||
| print(decimal_to_binary(42)) | print(decimal_to_binary(42)) | ||
| </ | </ | ||
| - | </ | + | </ |
| ### Binär-Addition | ### Binär-Addition | ||
| + | |||
| + | Die Addition von Binärzahlen erfolgt wie die schriftliche Addition von Dezimalzahlen: | ||
| + | |||
| + | {{.: | ||
| + | |||
| Umsetzungsidee: | Umsetzungsidee: | ||
| * Beide Strings paarweise [[gf_informatik: | * Beide Strings paarweise [[gf_informatik: | ||
| * An jeder Position das Bit aus `a` und `b` sowie einen allfälligen Übertrag addieren. | * An jeder Position das Bit aus `a` und `b` sowie einen allfälligen Übertrag addieren. | ||
| + | * Achtung: Die einzelnen Positionen eines Strings sind die Buchstaben `' | ||
| * Das Resultat-Bit an der Position ist `1`, wenn die Summe `1` oder `3` ist, sonst `0`. | * 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`... | * Tipp: also genau das Resultat von `summe % 2`... | ||
| Zeile 85: | Zeile 91: | ||
| * Also genau dem Resultat von ...? | * Also genau dem Resultat von ...? | ||
| - | < | + | < |
| <script type=" | <script type=" | ||
| def binary_add(a, | def binary_add(a, | ||
| Zeile 93: | Zeile 99: | ||
| # 3) An jeder Stelle: Resultat und Übertrag berechnen. | # 3) An jeder Stelle: Resultat und Übertrag berechnen. | ||
| - | print(binary_add(" | + | print(binary_add(" |
| </ | </ | ||
| <script type=" | <script type=" | ||
| Zeile 122: | Zeile 128: | ||
| digit_b = int(b[index]) | digit_b = int(b[index]) | ||
| sum = digit_a + digit_b + carry | sum = digit_a + digit_b + carry | ||
| - | bit = sum % 2 | + | bit = sum % 2 # Resultat-Bit ist 1, wenn die Summe ungerade ist |
| - | carry = sum // 2 | + | carry = sum // 2 # Übertrag ist 1, wenn die Summe 2 oder 3 ist |
| out = str(bit) + out | out = str(bit) + out | ||
| Zeile 134: | Zeile 140: | ||
| print(binary_add(" | print(binary_add(" | ||
| </ | </ | ||
| - | </ | + | </ |
| ### Binär-Subtraktion | ### Binär-Subtraktion | ||
| - | Für die Subtraktion im Binärsystem wird das _Zweierkomplement_ | + | Für die Subtraktion im Binärsystem wird das {{gf_informatik: |
| - | 1. Auffüllen auf die gewünschte Anzahl Bits | + | |
| + | 1. Auffüllen | ||
| 2. Invertieren | 2. Invertieren | ||
| 3. `" | 3. `" | ||
| - | Der Code aus der vorherigen Aufgabe wird also benötigt. | + | Der Code aus der vorherigen Aufgabe wird für die Addition |
| - | < | + | < |
| <script type=" | <script type=" | ||
| def invert(b): | def invert(b): | ||
| Zeile 219: | Zeile 227: | ||
| return result | return result | ||
| </ | </ | ||
| - | </ | + | </ |
| - | ++++ | + | |
| - | </ | + | |
| ### Ausprobieren | ### Ausprobieren | ||
| Zeile 227: | Zeile 234: | ||
| Kopiere alle Funktionen oben in die gleiche Python-Datei. Überprüfe danach die Funktionsweise: | Kopiere alle Funktionen oben in die gleiche Python-Datei. Überprüfe danach die Funktionsweise: | ||
| - | < | + | < |
| a_dec = 42 | a_dec = 42 | ||
| b_dec = 19 | b_dec = 19 | ||
| Zeile 235: | Zeile 242: | ||
| difference_dec = binary_to_decimal(difference_bin) | difference_dec = binary_to_decimal(difference_bin) | ||
| print(f" | print(f" | ||
| - | </ | + | </ |
| Resultat: | Resultat: | ||