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)
您的陈述:
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
是否等于1
或0
。如果没有看到代码的其余部分,就不可能知道该行在上下文中的作用,但希望这能为您提供足够的提示,让您了解您想要弄清楚的任何内容。