开发者

Difference between ^ Operator in JS and Python

开发者 https://www.devze.com 2022-12-11 07:15 出处:网络
I need to port s开发者_运维百科ome JS code which involves Math.random()*2147483648)^(new Date).getTime(). While it looks like for smaller numbers, the python function and the JS function are equivalen

I need to port s开发者_运维百科ome JS code which involves Math.random()*2147483648)^(new Date).getTime(). While it looks like for smaller numbers, the python function and the JS function are equivalent in function, but with large numbers like this, the values end up entirely different.

Python:

>>> 2147483647 ^ 1257628307380
1257075044427

Javascript:

> 2147483647 ^ 1257628307380
-1350373301

How can I get the Javascript value from python?


Python has unlimited-precision integers, while Javascript is using a 32-bit integer. You can manually apply a 32-bit limit to get the result you want:

def xor32bit(a, b):
    m = (a ^ b) % (2**32)
    if m > (2**16):
        m -= 2**32
    return m


Easiest way would be to use ctypes to get the same overflow behavior as Javascript:

>>> import ctypes
>>> ctypes.c_int(1257075044427)
c_long(-1350373301)

To get the value:

>>> ctypes.c_int(1257075044427).value
-1350373301
0

精彩评论

暂无评论...
验证码 换一张
取 消