Bitwise运算符&在Python中

问题描述 投票:0回答:2

最近,我正在用Hackerrank解决条件中的一个非常基本的问题。

问题是:

如果n为奇数,则打印怪异如果n为偶数且在2到5的范围内,则打印Not Weird如果n是偶数且在6到20的范围内,则打印为怪异如果n为偶数且大于20,则打印Not Weird

所以我写了下面的代码

if(n % 2 == 0 & n >=6 & n <= 20 ):
    print("Weird")
elif(n % 2 == 0 & n <= 2 & n >= 5): 
     print("Not Weird")
elif( n % 2 != 0):
     print("Weird")
else:
     print("Not Weird")

起初没有用。我发现我必须使用“和”而不是“&”。但是,我不知道为什么会这样。对于n = 12,如果条件为true,则第一个条件的所有3个条件。所以true&true&true也应该是true,对吧?

this photo shows the code snippet with some print messages

我很高兴知道这种行为背后的原因,请指导! (可能是非常小的事情,但请不要介意:))

python conditional-statements bitwise-operators
2个回答
0
投票

对于n = 12,如果条件为true,则第一个条件的所有3个条件。

>>> n = 12
>>> n % 2 == 0 & n >= 6 & n <= 20
False

第二个条件为假(条件不是您认为的那样,因为按位运算符与其他数字运算符[+-%等)相似,因为它们的优先级更高比比较运算符)。

让我们分解一下:

>>> n % 2
0
>>> 0 & n
0
>>> 6 & n
4
>>> 0 == 0 >= 4 <= 20
False

由于0 & n >= 6 & n条件,该表达式为假。 0不大于4!


0
投票

我已经自定义您的代码,它可以正常工作。您可以应用此代码。

n = int(input("Enter n : "))

if(n%2 != 0):
    print("Weird")

elif(n%2 == 0 and n >= 2 and n <= 5): 
     print("Not Weird")

elif(n%2 == 0 and n >=6 and n <= 20 ):
    print("Weird")

else:
    print("Not Weird")

0
投票

grammar可能不会立即显而易见,但是二进制算术运算的绑定比二进制按位运算的绑定更紧密。因此,您的比较与

相同
>>> if(n % 2 == (0 & n) >= (6 & n) <= 20 ):
...     print("Weird")
... 
>>>

您的“真实与真实&true”案例是

>>> if((n % 2 == 0) & (n >=6) & (n <= 20) ):
...     print('Weird')
... 
Weird

但是那只行,因为python TrueFalse的计算结果为10。由于这种基础表示,按位操作才有效。

© www.soinside.com 2019 - 2024. All rights reserved.