2024-09-29 02:20:56 发布
网友
嗨,我发现了下面的密码
numdigits = len(cardNumber) oddeven = numdigits & 1
这到底是怎么回事?我不知道“&;”在做什么。
&符号是按位与运算符。与1一起使用时,它基本上会屏蔽该值以提取最低位,或者换句话说,它会告诉您该值是偶数还是奇数。
&
有关详细信息,请参见: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表示为1:
0 0 0 1 x x x x 8 4 2 1 = = = = 0 + 0 + 0 + 1 = 1
与这样的1值相乘将导致1(如果该值的最右边的位已设置),如果未设置0。
0
因为在大多数语言中,0通常被认为是“false”,而非零值被认为是“true”,所以我们可以简单地说:
if (value & 1): do_something_with_odd_value()...
这是一个按位操作,在本例中,如果cardNumber有偶数个元素(或者另一个元素),则为oddeven分配零。
cardNumber
oddeven
例如:假设len(cardNumber) == 235。然后numdigits == 235,这是二进制的0b11101011。现在1是'0b00000001'二进制的,当您“和”它们按位时,您将得到:
len(cardNumber) == 235
numdigits == 235
0b11101011
'0b00000001'
11101011 & 00000001 ---------- = 00000001
同样,如果numdigits是234,您将得到:
numdigits
11101010 & 00000001 ---------- = 00000000
所以,这基本上是一种模糊的方法来检查len(cardNumber) % 2。可能是有C背景的人写的,因为它不是很Python可读性计数!
len(cardNumber) % 2
另外,&是also used用于取两个Python sets的交集:
set1 = {0,1,2,3} set2 = {2,3,4,5} print(set1 & set2) >>>set([2, 3])
回答
&
符号是按位与运算符。与1一起使用时,它基本上会屏蔽该值以提取最低位,或者换句话说,它会告诉您该值是偶数还是奇数。关于Python的
&
操作符的更多信息有关详细信息,请参见:http://wiki.python.org/moin/BitwiseOperators
为什么要检查奇偶
编辑:添加此部分,因为此答案获得了一些爱
将一个值与1相乘的原因可能一开始并不明显。
一个数字的二进制表示本质上是从最右边的数字1、2、4、8开始向左移动的2次幂的是或否序列的和。。。
用这种方法表示任何数字只有一种方法。E、 数字13(以10为基数)可以用二进制写为“1101”(或十六进制写为0xD,但那不在这里)。请看这里:
注意,除了最右边的二进制数字之外,所有其他的
1
数字都将向和中添加偶数(即2的倍数)。所以得到奇数和的唯一方法就是从最右边的数字加上奇数1。所以如果我们好奇一个数字是奇数还是偶数,我们可以看看它的二进制表示,忽略除最右边的数字以外的所有内容。为此,我们使用位与运算符。二进制中的值
1
表示为1
:与这样的
1
值相乘将导致1
(如果该值的最右边的位已设置),如果未设置0
。因为在大多数语言中,
0
通常被认为是“false”,而非零值被认为是“true”,所以我们可以简单地说:这是一个按位操作,在本例中,如果
cardNumber
有偶数个元素(或者另一个元素),则为oddeven
分配零。例如:假设
len(cardNumber) == 235
。然后numdigits == 235
,这是二进制的0b11101011
。现在1
是'0b00000001'
二进制的,当您“和”它们按位时,您将得到:同样,如果
numdigits
是234,您将得到:所以,这基本上是一种模糊的方法来检查
len(cardNumber) % 2
。可能是有C背景的人写的,因为它不是很Python可读性计数!另外,
&
是also used用于取两个Python sets的交集:相关问题 更多 >
编程相关推荐