2016-04-28 45 views
0

Source爲什麼python的zlib.crc32需要按位AND來被認爲是「穩定的」?

改變在3.0版本:總是返回一個無符號值。要在所有Python版本和平臺上生成相同的數值,請使用crc32(data)& 0xffffffff

但是,爲什麼我們需要使用按位和二進制數設置爲全1?不管結果如何(不論是在任何二進制數字中,BITWISE ANDED與所有的1都將是相同的二進制數字)?這看似任意的細節讓我感到不舒服。

回答

3

按位&強制將該值轉換爲無符號整數。舉個例子:

>>> -2 & 0xffffffff 
4294967294 

基於註釋您所引述的,在3.0的Python改爲總是返回一個無符號值,而在以前的版本中crc32()方法可能會返回一個符號值。

例如,在Python 2.7.11:

>>> crc32('the quick brown fox') 
-1849621814 

但是在Python 3.4.3:

>>> crc32(b'the quick brown fox') 
2445345482 

所以,你在這裏得到不同的值,但如果在Python 2.7執行按位並且,您可以獲得與Python 3.4中相同的值:

>>> crc32('the quick brown fox') & 0xffffffff 
2445345482 
+0

只是爲了澄清,按位和運算符(與蟒蛇無關)performe d是一個二進制數和一個由全1組成的二進制數 - 根據定義,永遠不會更改任何「XXXX」和「1111」=「XXXX」。它恰巧在python中,按位和運算符也將數字轉換爲無符號。它是否正確? (請注意,這不等於使用abs)我的想法是否正確? – AlanSTACK

相關問題