簡體   English   中英

python中的&是什么意思

[英]What does & mean in python

嗨,我遇到了以下代碼

numdigits = len(cardNumber)
oddeven = numdigits & 1

這里到底發生了什么? 我不確定“&”在做什么。

回答

&符號是一個按位 AND 運算符。 與 1 一起使用,它基本上屏蔽了值以提取最低位,或者換句話說,它會告訴您該值是偶數還是奇數。

有關 Python 的&運算符的更多信息

有關更多信息,請參閱: 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()...

&也用於取兩個Python 集的交集:

set1 = {0,1,2,3}
set2 = {2,3,4,5}
print(set1 & set2)
>>>set([2, 3])

更一般地說,Python 允許運算符重載,這意味着您可以編寫重新解釋&運算符功能的類。 這就是PandasNumpy等庫如何劫持& .

這是一個按位運算,在這種情況下,如果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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM