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?
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
Du bekommst kein stummes Fehlverhalten, wenn du am Ende größere Zahlen brauchst, als du erwartet hast. – user2357112
Was meinst du mit "Implikationen" genau? Die einzige wirkliche Implikation ist, dass Sie vorsichtig sein müssen. Suchst du etwas Bestimmteres? Wenn ja, was? –