4-Bit-MiniInt
# -*- coding: iso-8859-1 -*-
# mk, 15.9.08, 9.11.08
# 4-Bit-Int
# Dictionary Z = { key:wert,.. }
Z = {0:[0,0,0,0],1:[0,0,0,1],2:[0,0,1,0],3:[0,0,1,1],
4:[0,1,0,0],5:[0,1,0,1],6:[0,1,1,0],7:[0,1,1,1],
-8:[1,0,0,0],-7:[1,0,0,1],-6:[1,0,1,0],-5:[1,0,1,1],
-4:[1,1,0,0],-3:[1,1,0,1],-2:[1,1,1,0],-1:[1,1,1,1]}
def Itoi(a):
"""
Int a wird in ein MiniInt umgewandelt
"""
return Z[a] # lesender Zugriff auf globale Variable Z
def itoI(b):
"""
MiniInt b wird in Int umgewandelt
"""
for k in Z.keys():
if Z[k]==b:
return k
def ha(a,b):
"""
Halbaddierer, a = 0 oder 1, b = 0 oder 1
"""
s = a^b
ue = a&b
return [s,ue]
def va(a,b,c):
"""
Volladdierer, a = 0 oder 1, b = 0 oder 1, v = 0 oder 1,
"""
[s1,ue1] = ha(a,b)
[s,ue2] = ha(s1,c)
ue = ue1|ue2
return [s,ue]
def gl(a,b):
"""
die beiden Listen a und b werden dadurch auf gleiche Länge gebracht,
dass die kürzere von vorne mit Nullen aufgefüllt wird
die Listen werden als [a,b] zurückgegeben
"""
na = len(a)
nb = len(b)
if na < nb:
n = nb
while len(a) < n:
a = [0]+a
else:
n = na
while len(b) < n:
b = [0]+b
return [a,b]
def addbin(a,b):
"""
die beiden 'Binär-Listen' a und b werden addiert
"""
[a,b] = gl(a,b)
n = len(a)
ue = 0
s = []
for i in range(n-1,-1,-1):
[si,ue] = va(a[i],b[i],ue)
s = [si]+s
return s
def add1(a):
"""
zur 'Binär-Liste' a wird 1 addiert,
dabei wird ein Übertrag nicht berücksichtigt
"""
n = len(a)
s = []
ue = 1
for i in range(n-1,-1,-1):
[si,ue] = ha(a[i],ue)
s = [si]+s
return s
def sub1(a):
"""
von der 'Binär-Liste' a wird 1 subtrahiert,
dabei wird ein Übertrag nicht berücksichtigt
"""
n = len(a)
s = []
ue = 0
for i in range(n-1,-1,-1):
[si,ue] = va(a[i],1,ue)
s = [si]+s
return s
def zweierkomplement(a):
"""
zur 'Binär-Liste' a wird das Zweierkomplement gebildet
"""
a = a[:] # erst kopieren, damit es keine Seiteneffekte gibt
n = len(a)
for i in range(n):
a[i] = 1-a[i]
return add1(a)
def subbin(a,b):
"""
die 'Binär-Liste' b wird von der 'Binär-Liste' a subtrahiert
"""
b2 = zweierkomplement(b)
return addbin(a,b2)
def testadd(a,b):
return itoI(addbin(Itoi(a),Itoi(b)))
def testsub(a,b):
return itoI(subbin(Itoi(a),Itoi(b)))
miniint.py