Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:zahlensysteme:binary_solutions [2026-04-21 06:02] – [Binär-Subtraktion] hofgf_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
-<html><script type="module" src="https://bottom.ch/editor/stable/bottom-exercise.js"></script></html>+
 ### 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. Zwei mögliche Ansätze sind:+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.    1. **Zwei separate Variablen**: Eine für die Position und eine für den Exponenten.
Zeile 24: Zeile 24:
    3. Das Zwischenresultat wird **fortlaufend mit 2 multipliziert**.    3. Das Zwischenresultat wird **fortlaufend mit 2 multipliziert**.
  
-<html><bottom-exercise session="page" id="bin2dec">+<bottom-exercise session="page" id="bin2dec">
 <script type="text/x-starter"> <script type="text/x-starter">
 def binary_to_decimal(b): def binary_to_decimal(b):
Zeile 46: Zeile 46:
 print(binary_to_decimal("101010")) print(binary_to_decimal("101010"))
 </script> </script>
-</bottom-exercise></html>+</bottom-exercise>
  
  
Zeile 53: Zeile 53:
 Der {{gf_informatik:gfif_zahlensysteme_dossier_hof.pdf#page.8|Restwertalgorithmus wird im Dossier}} erklärt: Wir bilden fortlaufend den Rest und den Ganzzahl-Quotienten. Der Algorithmus funktioniert übrigens für alle Basen! Der {{gf_informatik:gfif_zahlensysteme_dossier_hof.pdf#page.8|Restwertalgorithmus wird im Dossier}} erklärt: Wir bilden fortlaufend den Rest und den Ganzzahl-Quotienten. Der Algorithmus funktioniert übrigens für alle Basen!
  
-<html><bottom-exercise session="page" id="dec2bin">+<bottom-exercise session="page" id="dec2bin">
 <script type="text/x-starter"> <script type="text/x-starter">
 def decimal_to_binary(d): def decimal_to_binary(d):
Zeile 75: Zeile 75:
 print(decimal_to_binary(42)) print(decimal_to_binary(42))
 </script> </script>
-</bottom-exercise></html>+</bottom-exercise>
 ### Binär-Addition ### 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.
 +
 +{{.:binary_solutions:pasted:20260428-152720.png?nolink&283}}
 +
 Umsetzungsidee: Umsetzungsidee:
   * Beide Strings paarweise [[gf_informatik:zahlensysteme:binary_collection#rueckwaerts|von rechts nach links]] durchlaufen.   * Beide Strings paarweise [[gf_informatik:zahlensysteme:binary_collection#rueckwaerts|von rechts nach links]] durchlaufen.
   * 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 `'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`.   * 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 ...?
  
-<html><bottom-exercise id="binary-add" hidesolution>+<bottom-exercise id="binary-add" showsolution>
 <script type="text/x-starter"> <script type="text/x-starter">
 def binary_add(a, b): def binary_add(a, b):
Zeile 93: Zeile 99:
     # 3) An jeder Stelle: Resultat und Übertrag berechnen.     # 3) An jeder Stelle: Resultat und Übertrag berechnen.
  
-print(binary_add("101010", "10111"))+print(binary_add("11001011", "10101110"))
 </script> </script>
 <script type="text/x-test"> <script type="text/x-test">
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("101010", "10111")) print(binary_add("101010", "10111"))
 </script> </script>
-</bottom-exercise></html>+</bottom-exercise> 
  
 ### Binär-Subtraktion ### 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: +Für die Subtraktion im Binärsystem wird das {{gf_informatik:gfif_zahlensysteme_dossier_hof.pdf#subsection.3.4|Zweierkomplement}} des Subtrahends _addiert_. Wir benötigen also Code für das Berechnen des Zweierkomplements: 
-1. Auffüllen auf die gewünschte Anzahl Bits+ 
 +1. Auffüllen mit Nullen auf die gewünschte Anzahl Bits
 2. Invertieren 2. Invertieren
 3. `"1"` addieren mit Binär-Addition 3. `"1"` addieren mit Binär-Addition
  
-Der Code aus der vorherigen Aufgabe wird also benötigt.+Der Code aus der vorherigen Aufgabe wird für die Addition benötigt.
  
-<html><bottom-exercise id="binary-subtract">+<bottom-exercise id="binary-subtract" showsolution style="max-height:20lh;">
 <script type="text/x-starter"> <script type="text/x-starter">
 def invert(b): def invert(b):
Zeile 219: Zeile 227:
     return result     return result
 </script> </script>
-</bottom-editor></html+</bottom-editor> 
-++++ +
-</nodisp>+
  
 ### 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:
  
-<html><bottom-editor session="page">+<bottom-editor session="page">
 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"{a_dec} - {b_dec} = {a_bin} - {b_bin} = {difference_bin} = {difference_dec}") print(f"{a_dec} - {b_dec} = {a_bin} - {b_bin} = {difference_bin} = {difference_dec}")
-</bottom-editor></html>+</bottom-editor>
  
 Resultat: Resultat:
  • gf_informatik/zahlensysteme/binary_solutions.1776751373.txt.gz
  • Zuletzt geändert: 2026-04-21 06:02
  • von hof