Python如何執行按位操作?是從LSB到MSB,還是相反?那麼Python如何對具有不同位數的數字進行操作?舉例來說,假設我有:Python和按位操作
A = 0000 1000 1111 1001 0101
B = 0110 1010
C = (A & B) is not 0
Python是否開始從MSB上的每個操作,這將評估爲真,但如果它從開始操作LSB每個,它會評估爲False。
Python如何執行按位操作?是從LSB到MSB,還是相反?那麼Python如何對具有不同位數的數字進行操作?舉例來說,假設我有:Python和按位操作
A = 0000 1000 1111 1001 0101
B = 0110 1010
C = (A & B) is not 0
Python是否開始從MSB上的每個操作,這將評估爲真,但如果它從開始操作LSB每個,它會評估爲False。
以二進制前置輸入數字的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怪癖。因此==
可能是更安全的選擇。
這不是一個怪癖。 '是'檢查*對象標識*。 '=='比較*值*。使用一個代替另一個就像使用'.append()'而不是'.pop()'使用'list's,或者在'str's的情況下使用'len'而不是'int'。 – Bakuriu
這個怪癖是255以上的單數是單身(「is」會在那裏工作)。以上的不是。 'is'和'=='之間的區別完全合理! –
它從LSB –
**開始**注意:**不是0的事實將按預期工作(在CPython上)僅僅是因爲運氣。您*必須*使用'!= 0'來讓程序根據語言具有正確的語義。可能有一個python的實現,因爲「不是」比較身份而不是值,獨立於「A和B」的值,「C」總是* false。文檔很清楚哪些對象是單例。它們是'None','True','False','Ellipsis','NotImplemented'。數字*不*保證是單身人士。 – Bakuriu
@Bakuriu是的,其實我剛纔發現了一個。事實上,這就是促成這個問題的原因。我和兩個200多位字符串在一起,並且保持了錯誤的「真實」值。 – Woody1193