我正在尝试这样做:
打印17593028247552 ^ 909522486
结果必须 67450422 (在javascript中),但我得到 17592253494838L
请帮帮我!在此先感谢:)
答案 0 :(得分:7)
Python 2的long
类型(或Python 3中的int
)可以根据需要增长,但看起来你想要32位结果。
您只需要屏蔽结果,这样您只能获得结果的低32位。我想,既然你使用的是Python 2,你也应该将它从long
转换为int
。
>>> int((17593028247552 ^ 909522486 ) & 0xffffffff)
67450422
答案 1 :(得分:0)
我刚使用Windows计算器:
100000000000000110010001100110000000000000000 = 17593028247552d
000000000000000110110001101100011011000110110 = 909522486d
100000000000000000100000001010011011000110110 = 17592253494838d
看起来JavaScript是错误的。在进行XOR之前,它可能会缩小到32位。 Python是整数的任意精度。
编辑:正如另一个答案所指出的那样,如果你还在使用Python 2(不要这样做!),那么长期就是任意精度; int的精度可以变化,但通常是64位。在Python 3中,只有一个整数类型,它总是任意精度。