[英]What does & mean in python
嗨,我遇到了以下代碼
numdigits = len(cardNumber)
oddeven = numdigits & 1
這里到底發生了什么? 我不確定“&”在做什么。
&
符號是一個按位 AND 運算符。 與 1 一起使用,它基本上屏蔽了值以提取最低位,或者換句話說,它會告訴您該值是偶數還是奇數。
&
運算符的更多信息有關更多信息,請參閱: http : //wiki.python.org/moin/BitwiseOperators
編輯:添加此部分,因為這個答案得到了一些愛
將一個值與 1 進行 AND 運算的原因一開始可能會說明該值是奇數還是偶數。
一個數字的二進制表示本質上是從最右邊的數字開始向左移動的 YES 或 NO 的一系列 YES 或 NO 的總和,其中 1, 2, 4, 8, ...
只有一種方法可以以這種方式表示任何數字。 例如,數字 13(以 10 為底)可以用二進制寫成“1101”(或十六進制寫成 0xD,但這不是重點)。 看這里:
1 1 0 1
x x x x
8 4 2 1
= = = =
8 + 4 + 0 + 1 = 13
請注意,除了最右邊的二進制數字外,所有其他1
數字都會將偶數(即 2 的倍數)添加到總和中。 因此,獲得奇數最終和的唯一方法是從最右邊的數字中添加奇數 1。 因此,如果我們好奇一個數是奇數還是偶數,我們可以查看它的二進制表示並忽略除最右邊的數字之外的所有內容。
為此,我們使用按位 AND 運算符。 二進制值1
表示為1
:
0 0 0 1
x x x x
8 4 2 1
= = = =
0 + 0 + 0 + 1 = 1
如果設置了該值的最右邊位,則像這樣將一個值與1
AND 運算將導致1
否則將導致0
。
因為0
在大多數語言中通常被認為是“假”,而非零值被認為是“真”,我們可以簡單地說:
if (value & 1): do_something_with_odd_value()...
這是一個按位運算,在這種情況下,如果cardNumber
具有偶數個元素(否則為一個), oddeven
零分配給oddeven
數。
例如:假設len(cardNumber) == 235
。 然后numdigits == 235
,即二進制的0b11101011
。 現在1
是二進制的'0b00000001'
,當你“與”它們時,按位,你會得到:
11101011
&
00000001
----------
= 00000001
同樣,如果numdigits
為 234,您將得到:
11101010
&
00000001
----------
= 00000000
所以,它基本上是一種檢查是否為len(cardNumber) % 2
的混淆方法。 可能是由具有 C 背景的人編寫的,因為它不是很 Pythonic - 可讀性很重要!
&
是一個按位和,這是一種進行位級計算的有效方法。 它采用numdigits
並與1
逐位進行numdigits
。
這是一個二進制按位 AND 運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.