2016-07-27 6 views
2

Es gibt ein Bit-Manipulationsproblem, das Sie auffordert, zwei Ganzzahlen zusammenzufassen, ohne + oder - Operatoren zu verwenden. Unten ist der Code in Java:Welche Auswirkungen haben Python-Ganzzahlen, die nicht auf 32 oder 64 Bit beschränkt sind?

public int getSum(int a, int b) { 
    while (b != 0) { 
     int carry = a & b; 
     a = a^b; 
     b = carry << 1; 
    } 
    return a; 
} 

Wenn Sie versuchen, -1 und 1 zu summieren, nehmen die Zwischenwerte auf [-2, 2], [-4, 4] und so weiter, bis die Zahl überläuft und das Ergebnis erreicht 0. Sie können in Python nicht dasselbe tun, der Prozess dauert für immer einen ganzen CPU-Thread und wächst langsam im Speicher. Es scheint, dass auf meinem Rechner die Nummern für eine Weile wachsen werden, bis keine Speicher mehr übrig sind.

def getSum(a, b): 
    while c != 0: 
     carry = a & b 
     a = a^b 
     b = carry << 1 
    return a 

if __name__ == '__main__': 
    print getSum(-1, 1) # will run forever 

Dies ist ziemlich eigenartig Beispiel, gibt es irgendwelche realen Auswirkungen nicht die ganzen Zahlen in der Größe begrenzt zu haben?

+3

Die tatsächliche Implikation ist, dass Sie nicht schrecklichen unlesbaren Code schreiben müssen, der Bitshift-Hacks verwendet, um arithmetisch zu arbeiten. Du schreibst einfach Mathe und es funktioniert einfach .. – wim

+1

Du bekommst kein stummes Fehlverhalten, wenn du am Ende größere Zahlen brauchst, als du erwartet hast. – user2357112

+0

Was meinst du mit "Implikationen" genau? Die einzige wirkliche Implikation ist, dass Sie vorsichtig sein müssen. Suchst du etwas Bestimmteres? Wenn ja, was? –

Antwort

3

die Auswirkungen sind, dass Sie müssen wissen und Ihre eigene integer Breiten erzwingen, wenn Prüfsummen Berechnung

Sie machen es die gewünschte Größe

carry = (a & b)&255 
a = (a^b)&255 
b = (carry << 1)&255 

ein Byte breiten Integer sein würde ..

+1

Obwohl dies ein guter Punkt ist, beantwortet es die Frage überhaupt nicht. – flornquake

+0

Wie beantwortet das nicht die Frage ... Sie müssen Größen erzwingen, wenn Sie versuchen, Prüfsummen zu implementieren ... das ist alles, was es auch gibt ... –

Verwandte Themen