我已经将使用位运算符的JavaScript代码转换为Python代码,但是在JavaScript和Python中执行时存在一个问题。
412287 << 10
当我在两种语言中执行此操作时,会得到相同的结果422181888。但是当我在两种语言中都这样做时,我得到了以下结果。
424970184 << 10
在JavaScript和Python中,我得到了不同的结果,分别是1377771520和435169468416。
有人能帮我解决这个问题吗? 非常感谢您的任何帮助。
我已经将使用位运算符的JavaScript代码转换为Python代码,但是在JavaScript和Python中执行时存在一个问题。
412287 << 10
当我在两种语言中执行此操作时,会得到相同的结果422181888。但是当我在两种语言中都这样做时,我得到了以下结果。
424970184 << 10
在JavaScript和Python中,我得到了不同的结果,分别是1377771520和435169468416。
有人能帮我解决这个问题吗? 非常感谢您的任何帮助。
import ctypes
print(ctypes.c_int(424970184 << 10 ^ 0).value)
输出:
1377771520
如此SO答案所述,Javascript中的位运算符和移位运算符作用于32位整数,您的第二个示例超出了32位容量,因此Python等效代码为:
(424970184 << 10) & 0x7FFFFFFF
使用有符号32位整数掩码可获得“模数”/“掩码”值,而不是实际值。
在Python中,整数容量没有限制,因此您将获得实际值。
(424970184 << 10) & (2**53-1)
的结果为 435169468416
。 - Jean-François Fabre