按位异或运算符在python中不起作用

按位异或运算符在python中不起作用,python,bit-manipulation,operator-keyword,xor,Python,Bit Manipulation,Operator Keyword,Xor,我正在尝试这样做: 打印17593028247552^909522486 结果必须是67450422(在javascript中也是如此),但我得到了17592253494838L 请帮帮我!提前感谢:)Python2的long类型(或Python3中的int可以根据需要进行扩展,但看起来您需要32位的结果 您只需要屏蔽结果,以便只获得结果的低32位。我想既然您使用的是Python2,您也应该将它从long转换为int >>> int((17593028247552 ^ 9095

我正在尝试这样做:

打印17593028247552^909522486

结果必须是67450422(在javascript中也是如此),但我得到了17592253494838L


请帮帮我!提前感谢:)

Python2的
long
类型(或Python3中的
int
可以根据需要进行扩展,但看起来您需要32位的结果

您只需要屏蔽结果,以便只获得结果的低32位。我想既然您使用的是Python2,您也应该将它从
long
转换为
int

>>> int((17593028247552 ^ 909522486 ) & 0xffffffff)
67450422

我刚刚使用了Windows计算器:

100000000000000110010001100110000000000000000  = 17593028247552d
000000000000000110110001101100011011000110110  =      909522486d
100000000000000000100000001010011011000110110  = 17592253494838d
看起来JavaScript是错误的。在执行XOR之前,它可能会缩小到32位或其他位置。Python对整数具有任意精度


编辑:正如另一个答案所指出的,如果您仍然使用Python2(不要这样做!),只有long是任意精度;int的精度可能不同,但通常为64位。在Python3中只有一种整数类型,它总是任意精度。

我可能会将其设置为
2**32-1
,以使结果四舍五入到的位数更为明显(例如,如果您想将其四舍五入到64,可以快速更改…@Jon Fair。也许我很守旧,但我喜欢六边形OTOH,Python在编译脚本时会计算
2**32-1
,所以使用十六进制形式没有什么真正的优势。我也碰巧喜欢十六进制形式-我只是不想输入128位:)(我可能会一开始就弄错了…)非常感谢。helpedPython可以是32位或64位。我们中的一些人仍然在运行32位机器。。。在32位构建中,Python 2
int
是32位的。