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 [2025-05-05 12:46] hofgf_informatik:zahlensysteme:binary_solutions [2025-05-17 08:12] (aktuell) – [Ausprobieren] hof
Zeile 28: Zeile 28:
  
 print(decimal_to_binary(42))</bottom-editor></html> print(decimal_to_binary(42))</bottom-editor></html>
- 
  
 ### Binär-Addition ### Binär-Addition
-<html><bottom-editor>def binary_add(a,b): +<html><bottom-editor>def fill_zeros(bdigits): 
-    """Addiert zwei Binärzahlen beliebiger Länge.""" +    while len(b) < digits:
-    # Ensure both operands have same lenght. +
-    while len(b) < len(a):+
         b = "0" + b         b = "0" + b
-    while len(a) len(b): +    return b 
-        a = "0"a +def binary_add(a,b): 
- +    """Addiert zwei Binärzahlen beliebiger Länge.""" 
-    len(a)+    n = max(len(a)len(b)) 
 +    a = fill_zeros(a, n) 
 +    fill_zeros(b, n) 
 +    
     out = ""     out = ""
     carry = 0     carry = 0
-    for i in range(n): +    index = n - 1 
-        j = n-i-1 +    while index >= 0: 
-        = int(a[j]) int(b[j]) + carry +        digit_a = int(a[index]) 
-        out = str(x%2) + out +        digit_b = int(b[index]) 
-        carry = x//2+        sum = digit_a + digit_b + carry 
 +        if sum == 0: 
 +            out = "0" + out 
 +            carry = 0 
 +        elif sum == 1: 
 +            out = "1" + out 
 +            carry = 
 +        elif sum == 2
 +            out = "0" + out 
 +            carry = 1 
 +        elif sum == 1: 
 +            out = "1" + out 
 +            carry = 1 
 +        index = index - 1
     if carry != 0:     if carry != 0:
         out = str(carry) + out         out = str(carry) + out
Zeile 52: Zeile 65:
  
 print(binary_add("101010", "10111"))</bottom-editor></html> print(binary_add("101010", "10111"))</bottom-editor></html>
 +### Binär-Subtraktion
 +
 +<code python>
 +def invert(b):
 +    """Erstellt einen neuen String, wobei 0en und 1en vertauscht sind."""
 +    result = ""
 +    for digit in b:
 +        if digit == "0":
 +            result = result + "1"
 +        else:
 +            result = result + "0"
 +    return result
 +
 +def zweierkomplement(b, stellen=8):
 +    """Berechnet das Zweierkomplement von b in der gewünschten Anzahl Stellen."""
 +    # 1) Auffüllen auf stellen bits
 +    b = fill_zeros(b, stellen)
 +    # 2) Invertieren (1->0, 0->1)
 +    b = invert(b)
 +    # 3) Addiere 1
 +    return binary_add(b, "1")
 +
 +def binary_subtraction(a, b, stellen=8):
 +    """Subtraktion als Addition des Zweierkomplements."""
 +    complement = zweierkomplement(b, stellen)
 +    result = binary_add(a, complement)
 +    result = result[-stellen: # Vorderstes Bit auslassen
 +    return result
 +</code>
 +
 +### Ausprobieren
 +
 +Kopiere alle Funktionen oben in die gleiche Python-Datei. Überprüfe danach die Funktionsweise:
 +
 +<code python>
 +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}")
 +</code>
 +
 +Resultat:
 +<code>
 +42 - 19 = 101010 - 10011 = 00010111 = 23
 +</code>
 +
  
  • gf_informatik/zahlensysteme/binary_solutions.1746449167.txt.gz
  • Zuletzt geändert: 2025-05-05 12:46
  • von hof