JS和Python中^运算符的区别
我需要把一些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