Pad*_*ham 2 python bit-manipulation
我正在努力理解"if(i >> j)%2 == 1"在以下函数或任何函数中的作用是什么?
def powerSet(items):
N = len(items)
for i in xrange(2**N):
combo = []
for j in xrange(N):
if (i >> j) % 2 == 1:
combo.append(items[j])
yield combo
Run Code Online (Sandbox Code Playgroud)
它检查是否设置了从末尾开始计数j的二进制数的第二位i.i >> j右移,所以最后一点j都消失了.n % 2 == 1是奇数的常见检查,二进制的最后一位设置.
编辑:这是生成如下的功率集.外循环遍历所有2**N子集items,每个子集表示为二进制整数.然后内部循环通过检查N这些整数的哪个最终位被设置来构造实际子集,使用位作为子集成员资格的指示符.
例如,假设N=5.然后在某个时候,i将是0b10011.[items[0], items[1], items[4]]由此,可以构建该集合.首先反转这些位,因为它们从右到左编号为j:
1 1 0 0 1
items[0] items[1] (nothing) (nothing) items[4]
Run Code Online (Sandbox Code Playgroud)
(尝试打印i并combo在内循环内部.)
| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |