""" if((counter & (1 << j)) > 0): """ 做什么?

I a*_*m L 0 python if-statement set data-structures python-3.x

我正在尝试打印数组的所有子集。if我在其中一个解决方案中发现了这一说法。

这个if条件有什么作用呢?

if((counter & (1 << j)) > 0):
Run Code Online (Sandbox Code Playgroud)

Gre*_*Guy 5

您的陈述:

if ( (counter & (1 << j)) > 0 ):
Run Code Online (Sandbox Code Playgroud)

这是一些按位运算。让我们来分解一下:

  • (1 << j)生成数字0b1并将其左移若干j位 -j必须是整数。这类似于2**j, 或 2 的 3j次方,但使用位移运算符<<可以清楚地表明我们正在执行按位运算。
  • counter & (1 << j)获取最后一个操作的结果,并对and变量进行按位运算counter。这似乎j是位掩码的说明符 - 它告诉签入哪个位很重要counter。由于无论(1 << j)生成什么1,其二进制表示形式都只有 1,counter & (1 << j)因此该表达式将始终生成 2 的幂或 0。
  • > 0检查生成的数字是否为 0。

总而言之,这是一种相当复杂的方法来检查j从右边开始的第 th 位counter是否等于10。如果没有看到代码的其余部分,就不可能知道该行在上下文中的作用,但希望这能为您提供足够的提示,让您了解您想要弄清楚的任何内容。