# -*- 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)))