JS和Python中^运算符的区别

2 投票
2 回答
763 浏览
提问于 2025-04-15 15:46

我需要把一些JS代码移植到Python中,这段代码涉及到 Math.random()*2147483648)^(new Date).getTime()。虽然对于较小的数字来说,Python和JS的函数看起来是等价的,但当数字变得很大时,结果就完全不同了。

Python:

>>> 2147483647 ^ 1257628307380
1257075044427

Javascript:

> 2147483647 ^ 1257628307380
-1350373301

我该如何从Python中得到和Javascript一样的值呢?

2 个回答

4

最简单的方法是使用ctypes,这样可以让你的程序表现得和Javascript一样,出现溢出效果:

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

要获取这个值:

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

Python 的整数可以无限大,而 JavaScript 的整数是 32 位的,这意味着它的数值范围是有限的。你可以手动设置一个 32 位的限制,这样就能得到你想要的结果:

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

撰写回答