cogmission
cogmission

Reputation: 107

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);

Upvotes: 2

Views: 153

Answers (2)

BPL
BPL

Reputation: 9863

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__

Upvotes: 3

Andreas Brunnet
Andreas Brunnet

Reputation: 732

You might cause an overflow. Java long is 64 bit long while python has no size limit. Try using Long wrapper class of long. The Long object has also no limits (Well technicially everything has its limits...).

Upvotes: 0

Related Questions