Bitwise XOR运算符不在python中工作

时间:2017-08-03 09:48:17

标签: python bit-manipulation operator-keyword xor

我正在尝试这样做:

打印17593028247552 ^ 909522486

结果必须 67450422 (在javascript中),但我得到 17592253494838L

请帮帮我!在此先感谢:)

2 个答案:

答案 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中,只有一个整数类型,它总是任意精度。