什么和&在python中意思是

时间:2011-12-19 01:15:18

标签: python

您好我遇到了以下代码

numdigits = len(cardNumber)
oddeven = numdigits & 1

到底发生了什么?我不确定“&”是什么正在做。

5 个答案:

答案 0 :(得分:33)

答案

&符号是按位AND运算符。与1一起使用时,它基本上屏蔽了提取最低位的值,换句话说,它将告诉您该值是偶数还是奇数。

有关Python的&运算符

的更多信息

有关详细信息,请参阅:http://wiki.python.org/moin/BitwiseOperators

为什么检查Odd vs. Even

编辑:添加此部分,因为这个答案得到了一些爱

将值与1进行AND运算的原因告诉该值是奇数还是偶数。一开始可能并不明显。

数字的二进制表示基本上是每个2的幂的一系列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,则设置为1的值将导致0,如果设置了最右边的位,则为0

因为if (value & 1): do_something_with_odd_value()... 在大多数语言中通常被视为“假”,而非零值被视为“真”,我们可以简单地说为快捷方式:

{{1}}

答案 1 :(得分:10)

此外,&also used,用于取两个Python sets的交集:

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

答案 2 :(得分:4)

这是一个按位操作,在这种情况下,如果oddeven具有偶数个元素(否则为一个),则为cardNumber分配零。

举个例子:假设len(cardNumber) == 235。然后numdigits == 235,即二进制0b11101011。现在1是二进制的'0b00000001',当你按顺序“和”它们时,你会得到:

  11101011
  &
  00000001
  ----------
= 00000001

同样,如果numdigits为234,您将得到:

  11101010
  &
  00000001
  ----------
= 00000000

所以,它基本上是一种检查len(cardNumber) % 2的混淆方式。可能是由具有C背景的人写的,因为它不是非常pythonic - 可读性很重要!

答案 3 :(得分:3)

&bitwise and,这是进行位级计算的有效方法。它正在numdigits并逐一地与1进行比较。

答案 4 :(得分:1)