# "101" auf 4 Bit -> "0101"
def gegenzahl(b, 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")
def addition(one, two):
# sicherstellen, dass beide Zahlen gleich lang sind:
while len(one) < len(two):
one = "0" + one
while len(one) > len(two):
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 = len(one) - 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):
# gegenzahl von two
komplement = gegenzahl(two, len(one))
# .. und addieren
return addition(one, komplement)
print(addition("0011", "0110"))
print(subtraktion("1011", "0011"))