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
我已经将该代码中使用按位运算符的 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