Multiplikation

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

nomnom hat geschrieben:@jerch: Du benutzt doch in deinem Code ständig "-", das ist doch unfair :p Dann geht auch

Code: Alles auswählen

add = lambda a, b: a - (-b)
Ok, Abkürzungen gelten nicht:

Code: Alles auswählen

ZERO = 0
ONE = 1

# simple 1 testing
def is_one(a):
    return ONE if a==ONE else ZERO

# xor equal testing
def equal(a, b):
    return is_one(((a^b) << ONE) | ONE)

# testing for zero (lazy version with using equal)
def is_zero(a):
    return equal(a, ZERO)

# simple incrementor
def inc(a):
    if equal(a, ~ZERO):
        return ZERO
    b = ONE
    while ONE:
        if is_zero(b):
            return a
        a, b = a^b, (a&b) << ONE

# negativate number: positive to negative and negative to positive
def neg(a):
    if is_zero(a):
        return a
    return inc(~a)
Jetzt kannst Du das '-' mit neg() ersetzen. Damit kannst Du die komplette Intergerarithmetik auf Bitoperatoren und den basalen 1 oder 0 Test zurückführen. Hochintegrierte ALUs waren gestern, hoch leben die Register ;)
(Zur Anschaulichkeit hab ich 1 und 0 mal durch "Konstanten" ersetzt)
Antworten