python的含义

2024-09-29 02:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我发现了下面的密码

numdigits = len(cardNumber)
oddeven = numdigits & 1

这到底是怎么回事?我不知道“&;”在做什么。


Tags: 密码lenampcardnumberoddevennumdigits
3条回答

回答

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

关于Python的&操作符的更多信息

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

为什么要检查奇偶

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

将一个值与1相乘的原因可能一开始并不明显。

一个数字的二进制表示本质上是从最右边的数字1、2、4、8开始向左移动的2次幂的是或否序列的和。。。

用这种方法表示任何数字只有一种方法。E、 数字13(以10为基数)可以用二进制写为“1101”(或十六进制写为0xD,但那不在这里)。请看这里:

    1   1   0   1
    x   x   x   x
    8   4   2   1
    =   =   =   =
    8 + 4 + 0 + 1  =  13

注意,除了最右边的二进制数字之外,所有其他的1数字都将向和中添加偶数(即2的倍数)。所以得到奇数和的唯一方法就是从最右边的数字加上奇数1。所以如果我们好奇一个数字是奇数还是偶数,我们可以看看它的二进制表示,忽略除最右边的数字以外的所有内容。

为此,我们使用位与运算符。二进制中的值1表示为1

    0   0   0   1
    x   x   x   x
    8   4   2   1
    =   =   =   =
    0 + 0 + 0 + 1  =  1

与这样的1值相乘将导致1(如果该值的最右边的位已设置),如果未设置0

因为在大多数语言中,0通常被认为是“false”,而非零值被认为是“true”,所以我们可以简单地说:

if (value & 1): do_something_with_odd_value()...

这是一个按位操作,在本例中,如果cardNumber有偶数个元素(或者另一个元素),则为oddeven分配零。

例如:假设len(cardNumber) == 235。然后numdigits == 235,这是二进制的0b11101011。现在1'0b00000001'二进制的,当您“和”它们按位时,您将得到:

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

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

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

所以,这基本上是一种模糊的方法来检查len(cardNumber) % 2。可能是有C背景的人写的,因为它不是很Python可读性计数!

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

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

相关问题 更多 >