2017-08-03 101 views
2

不工作我試圖做到這一點:位異或操作者在python

打印17593028247552^909522486

的結果必須是(如在JavaScript中),但我得到17592253494838L

請幫幫我!因爲他們需要提前:)(在Python 3或int

回答

7

Python 2中的long型由於可以成長爲大,但它看起來像你想有一個32位的結果。

你只需要屏蔽結果,所以你只能得到低32位的結果。我想,既然你使用的是Python 2,你也應該把它從long轉換爲int

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

我可能會試圖把它作爲'2 ** 32 - 1'來使它對於結果四捨五入的位數變得更加明顯(如果你想將它舍入到64例如...) –

+0

@Jon夠了。也許我是老式的,但我喜歡十六進制格式。 :) OTOH,Python在編譯腳本時會評估'2 ** 32 - 1',所以在使用十六進制表單時沒有真正的優勢。 –

+0

我也碰巧喜歡十六進制形式 - 我只是不想輸入它的128位:)(我可能會得到錯誤的開始...) –

0

我只是用Windows計算器:

100000000000000110010001100110000000000000000 = 17593028247552d 
000000000000000110110001101100011011000110110 =  909522486d 
100000000000000000100000001010011011000110110 = 17592253494838d 

看起來像JavaScript是錯誤的。在進行XOR之前,它可能縮小到32位或某些東西。 Python對整數是任意的精度。

編輯:正如其他答案指出的,如果你仍然在使用Python 2(不這樣做!)只有長期是任意的精度; int的精度可以變化,但通常是64位。在Python 3中,只有一個整數類型,並且始終是任意精度。

+0

Python可以是32位或64位。我們中的一些人仍在運行32位機器......在32位版本中,Python 2「int」是32位。 –