2015-09-20 81 views
0

Python如何執行按位操作?是從LSB到MSB,還是相反?那麼Python如何對具有不同位數的數字進行操作?舉例來說,假設我有:Python和按位操作

A = 0000 1000 1111 1001 0101 
B = 0110 1010 
C = (A & B) is not 0 

Python是否開始從MSB上的每個操作,這將評估爲真,但如果它從開始操作LSB每個,它會評估爲False。

+0

它從LSB –

+1

**開始**注意:**不是0的事實將按預期工作(在CPython上)僅僅是因爲運氣。您*必須*使用'!= 0'來讓程序根據語言具有正確的語義。可能有一個python的實現,因爲「不是」比較身份而不是值,獨立於「A和B」的值,「C」總是* false。文檔很清楚哪些對象是單例。它們是'None','True','False','Ellipsis','NotImplemented'。數字*不*保證是單身人士。 – Bakuriu

+0

@Bakuriu是的,其實我剛纔發現了一個。事實上,這就是促成這個問題的原因。我和兩個200多位字符串在一起,並且保持了錯誤的「真實」值。 – Woody1193

回答

2

以二進制前置輸入數字的0b(並離開了空格),就像你會與0x爲十六進制數字:

A = 0b00001000111110010101 
B = 0b01101010 
C = (A & B) is not 0 

您可以檢查由打印出來蟒蛇如何解釋這個(二進制例如十六進制):

print('{0:b} {0:x}'.format(A)) 
# 1000111110010101 8f95 

如您所見:它從LSB開始。

當與is"is" operator behaves unexpectedly with integers比較整數時,還會注意到一個python怪癖。因此==可能是更安全的選擇。

+1

這不是一個怪癖。 '是'檢查*對象標識*。 '=='比較*值*。使用一個代替另一個就像使用'.append()'而不是'.pop()'使用'list's,或者在'str's的情況下使用'len'而不是'int'。 – Bakuriu

+0

這個怪癖是255以上的單數是單身(「is」會在那裏工作)。以上的不是。 'is'和'=='之間的區別完全合理! –