if((counter&(1 << j))> 0):“”“是什么?

时间:2018-11-25 05:35:31

标签: python python-3.x if-statement data-structures set

我正在尝试打印数组的所有子集。我在解决方案中遇到过这个if语句。 如果有条件怎么办?

if((计数器&(1 << j))> 0):

2 个答案:

答案 0 :(得分:1)

您的声明:

if ( (counter & (1 << j)) > 0 ):

这是一些按位操作。让我们分解一下:

  • (1 << j)生成数字0b1并将其向左移j位-j必须是整数。这类似于说2**j,或者说第j的2次幂,但是使用移位运算符<<可以使我们清楚地知道我们正在执行按位运算。
  • counter & (1 << j)接受最后一次操作的结果,并对变量and进行按位counter运算。看来j是位掩码的说明符-它指出在counter中签入哪个位很重要。由于(1 << j)产生的任何东西在其二进制表示形式中将只包含一个1,因此表达式counter & (1 << j)将始终产生2或0的幂。
  • > 0检查生成的数字是否为0。

总而言之,这是一种相当复杂的方法,用于检查j右边第counter位是否等于10。没有看到其余的代码,就无法分辨该行在上下文中的作用,但是希望这能给您足够的提示,以帮助您解决所有问题。

答案 1 :(得分:1)

&运算符是按位运算符。更多信息here

基本上,如果我们将计数器视为二进制文件:

counter = 0b0010
1 << j -> with j = 0 

j将是您要使用1评估的职位。

因此,在这种情况下,由于AND运算符将返回0,因此不会执行IF语句。

但是:

counter = 0b0010
1 << j -> with j = 1

将执行IF语句,因为AND运算符将返回1。

要了解更多信息,可以使用以下代码并更改counter和j的值:

counter = 0b0100
j = 2

if((counter & (1 << j)) > 0):
    print("True")
else:
    print("False")