JavaScript 位运算符代码和 Python 位运算符代码之间的区别

difference between JavaScript bit-wise operator code and Python bit-wise operator code

我已经将该代码中使用按位运算符的 JavaScript 代码转换为 Python 代码,但是当我在 JavaScript 和 [=28 中执行此操作时出现一个问题=]

412287 << 10

然后我在两种语言中得到了 422181888 相同的结果。但是当我在两者中都这样做时

424970184 << 10

然后我在 1377771520 在 JavaScript 和 435169468416 在 Python 中得到不同的结果

有人可以帮我解决这个问题吗? 任何帮助将不胜感激。

this SO answer 所述,在 javascript 中,按位运算符和移位运算符对 32 位整数进行运算,而您的第二个示例溢出了 32 位容量,因此 python等价于:

(424970184 << 10) & 0x7FFFFFFF

(你得到一个带符号的 32 位整数掩码的 "modulo"/"masked" 值,而不是实际值)

在Python中,整数的容量没有限制,所以你得到的是实际值。

如果您想要 JavaScript 等效值,那么您可以做的是:

import ctypes

print(ctypes.c_int(424970184 << 10 ^ 0).value)

输出:

1377771520