JS和Python中^运算符的区别

时间:2009-11-07 21:34:45

标签: javascript python bit-manipulation xor

我需要移植一些涉及Math.random()*2147483648)^(new Date).getTime()的JS代码。虽然它看起来像较小的数字,但python函数和JS函数在功能上是等价的,但是像这样的大数字,值最终会完全不同。

的Python:

>>> 2147483647 ^ 1257628307380
1257075044427

使用Javascript:

> 2147483647 ^ 1257628307380
-1350373301

如何从python获取Javascript值?

2 个答案:

答案 0 :(得分:7)

Python具有无限精度的整数,而Javascript使用的是32位整数。您可以手动应用32位限制以获得所需的结果:

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

答案 1 :(得分:4)

最简单的方法是使用ctypes获得与Javascript相同的溢出行为:

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

获取值:

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