def binary_to_decimal(b): """Wandelt Binärzahl b in Dezimalzahl um.""" d = 0 for digit in b: d = d*2 d = d + int(digit) return d print(binary_to_decimal("101010"))

Restwertalgorithmus: def decimal_to_binary(d): """Wandelt Dezimalzahl mit dem Restwertalgorithmus in Binärzahl um.""" b = "" while d > 0: r = d % 2 d = d // 2 b = str(r) + b return b print(decimal_to_binary(42))

def fill_zeros(b, digits): while len(b) < digits: b = "0" + b return b def binary_add(a,b): """Addiert zwei Binärzahlen beliebiger Länge.""" n = max(len(a), len(b)) a = fill_zeros(a, n) b = fill_zeros(b, n) out = "" carry = 0 index = n - 1 while index >= 0: digit_a = int(a[index]) digit_b = int(b[index]) sum = digit_a + digit_b + carry if sum == 0: out = "0" + out carry = 0 elif sum == 1: out = "1" + out carry = 0 elif sum == 2: out = "0" + out carry = 1 elif sum == 1: out = "1" + out carry = 1 index = index - 1 if carry != 0: out = str(carry) + out return out print(binary_add("101010", "10111"))

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

Kopiere alle Funktionen oben in die gleiche Python-Datei. Überprüfe danach die Funktionsweise:

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}")

Resultat:

42 - 19 = 101010 - 10011 = 00010111 = 23
  • gf_informatik/zahlensysteme/binary_solutions.txt
  • Zuletzt geändert: 2025-05-17 08:12
  • von hof