2017-08-03 5 views

Antwort

7

Python 2 long Typ (oder int in Python 3) kann so groß werden, wie sie brauchen, aber es sieht aus wie Sie wollen ein 32-Bit-Ergebnis.

Sie müssen nur das Ergebnis maskieren, so dass Sie nur die niedrigen 32 Bits des Ergebnisses erhalten. Und ich nehme an, dass Sie, da Sie auf Python 2 sind, es auch von long zu int konvertieren sollten.

>>> int((17593028247552^909522486) & 0xffffffff) 
67450422 
+1

Ich könnte versucht sein, es als "2 ** 32 - 1" zu setzen, um es ein wenig offensichtlicher zu machen, wie viele Bits das Ergebnis gerundet wird (und eine schnelle Änderung, wenn Sie es runden wollten) 64 zum Beispiel ...) –

+0

@Jon Fair genug. Vielleicht bin ich altmodisch, aber ich mag die Hex-Form. :) OTOH, Python wird '2 ** 32 - 1' auswerten, wenn es das Skript kompiliert, also gibt es keinen wirklichen Vorteil bei der Verwendung der Hex-Form. –

+0

Ich mag auch die Hex-Form - ich würde es einfach nicht für 128 Bits tippen wollen :) (Ich würde es wahrscheinlich für einen Anfang falsch machen ...) –

0

habe ich nur Windows-Rechner:

100000000000000110010001100110000000000000000 = 17593028247552d 
000000000000000110110001101100011011000110110 =  909522486d 
100000000000000000100000001010011011000110110 = 17592253494838d 

Sieht aus wie JavaScript ist falsch. Es wird wahrscheinlich auf 32 Bit oder etwas kleiner, bevor XOR gemacht wird. Python ist eine beliebige Genauigkeit für Ganzzahlen.

Bearbeiten: Wie die andere Antwort zeigt, wenn Sie immer noch Python 2 verwenden (tun Sie das nicht!) Nur lang ist willkürliche Genauigkeit; Die Genauigkeit von Int kann variieren, ist aber normalerweise 64 Bit. In Python 3 gibt es nur einen Integer-Typ und es ist immer eine beliebige Genauigkeit.

+0

Python kann 32 Bit oder 64 Bit sein. Einige von uns laufen immer noch 32-Bit-Maschinen ... In einem 32-Bit-Build ist Python 2 "int" 32 Bit. –