问题描述
在 js 和 python 中运行按位与运算结果不一致。
在 js 中执行的结果:

在 Python 中执行的结果:

问题原因
在 JavaScript 内部,数值都是以 64 位浮点数的形式储存,但是做位运算的时候,是以 32 位带符号的整数进行运算的,并且返回值也是一个 32 位带符号的整数。
解决方案
目的是使在 python 中的显示和 js 中的显示相同,就在 Python 中做一次从 uint32 到 int32 的转换。
代码:
import struct
num = 4023233417 & 2562383102
print(num) # 2290649224
print(struct.unpack('i', struct.pack('I', num))[0]) # -2004318072
这样就和 js 中的结果完全一致了。