cogmission cogmission - 4 months ago 10
Python Question

Get the same shift left in Python as Java

Specifically I want to take this number:

x = 1452610545672622396


and perform

x ^= (x << 21) // In Python I do x ^= (x << 21) & 0xffffffffffffffff


I want to get:
-6403331237455490756
, which is what I get in Java

instead of:
12043412836254060860
, which is what I get in Python (which is what I don't want)

EDIT: In Java I do:

long x = 1452610545672622396;
x ^= (x << 21);

BPL BPL
Answer

You can use 64bit signed int like java using ctypes.c_longlong, please see example below:

from ctypes import c_longlong as ll

x = 1452610545672622396

output = ll(x^(x<<21))

print output
print output.__class__