Inhaltsverzeichnis

Zahlensysteme

Umwandlung Dezimal - Binär

binary_conversion.py
def bin_to_dec(b):
    """Berechnet die Zahl, die von einem Binärstring dargestellt wird."""
    result = 0
    for digit in b:
        result = result * 2
        if digit == '1':
            result = result + 1
    return result
 
def dec_to_bin(number):
    """Berechnet die Binärdarstellung einer Zahl mit dem Restwertalgorithmus."""
    result = ''
    while number > 0:
        digit = number % 2
        number = number // 2
        result = result + str(digit)
    return result

Arithmetik

binary_arithmetics.py
def gegenzahl(b, stellen):
    """Berechnet das Zweierkomplement einer Binärzahl in der gewünschten Anzahl Stellen."""
    # 1. gewünschte Anzahl bits
    while len(b) < stellen:
        b = "0" + b
 
    # 2. Bits invertieren (0->1, 1->0)
    result = ""
    for bit in b:
        if bit == "0":
            result = result + "1"
        else:
            result = result + "0"
 
    # 3. plus 1
    return addition(result, "1", stellen)
 
def addition(one, two, stellen=4):
    """Berechnet one + two in der gewünschten Anzahl Stellen."""
    # sicherstellen, dass beide Zahlen gleich lang sind:
    while len(one) < stellen:
        one = "0" + one
    while len(two) < stellen:
        two = "0" + two
    # repetiere Folgendes:
    #   von hinten nach vorne
    #   addieren wir ziffern paare
    #   merken uns rest -> resultat und behalte
 
    # one: "101"
 
    # 0 1 2
    # 2 1 0
    index = stellen - 1
    behalte = 0
    result = ""
    while index >= 0:
        bit_one = int(one[index])
        bit_two = int(two[index])
 
        sum = bit_one + bit_two + behalte
        rest = sum % 2
        behalte = sum // 2
 
        result = str(rest) + result        
        index = index - 1
 
    return result
 
# Returns one - two
def subtraktion(one, two):
    """Berechnet one - two in der gewünschten Anzahl Stellen."""
    stellen = len(one)
    # gegenzahl von two
    komplement = gegenzahl(two, stellen)
    # .. und addieren
    return addition(one, komplement, stellen)
 
print(addition("11", "11"))
print(subtraktion("1011", "0011"))