python中的&是啥意思

Posted

技术标签:

【中文标题】python中的&是啥意思【英文标题】:What does & mean in pythonpython中的&是什么意思 【发布时间】:2012-01-23 06:44:18 【问题描述】:

您好,我遇到了以下代码

numdigits = len(cardNumber)
oddeven = numdigits & 1

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

【问题讨论】:

与 Java 或 C# 或(仅在类似的上下文中)C 或 C++ 中的相同。 这个问题也值得研究:***.com/questions/1746613/bitwise-operation-and-usage 【参考方案1】:

回答

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

更多关于 Python 的 & 运算符的信息

欲了解更多信息,请参阅:http://wiki.python.org/moin/BitwiseOperators

为什么检查奇数和偶数会起作用

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

将一个值与 1 进行与运算来判断该值是奇数还是偶数的原因起初可能并不明显。

一个数字的二进制表示本质上是一系列 YES 或 NO 的总和,对于从最右边的数字开始向左移动的每个 2 的幂,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。因此,如果我们想知道一个数字是奇数还是偶数,我们可以查看它的二进制表示并忽略除最右边的数字之外的所有内容。

为此,我们使用按位与运算符。二进制值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()...

【讨论】:

【参考方案2】:

& 是also used 用于取两个Python sets 的交集:

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

更一般地说,Python 允许 operator overloading,这意味着您可以编写重新解释 & 操作符的类的类。这就是 Pandas 和 Numpy 等库劫持 & 的方式。

【讨论】:

【参考方案3】:

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

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

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

同样,如果numdigits 是 234,你会得到:

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

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

【讨论】:

【参考方案4】:

& 是bitwise and,这是一种进行位级计算的有效方法。它使用numdigits 并与1 逐位进行。

【讨论】:

【参考方案5】:

这是binary bitwise AND operator。

【讨论】:

以上是关于python中的&是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

Rust 类型中的 & 符号是啥意思?

c++ 中的代码 `[&]()` 是啥意思? [复制]

这个 sql where 子句中的“&”是啥意思?

bash 中的“1>&2”是啥意思? [复制]

长生不老药函数中的“&1”是啥意思?

Ruby 中的“temps.each(&:valid?)”是啥意思? [复制]