# Zahlensysteme
## Umwandlung Dezimal - Binär
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
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"))