C++ 子集相关位操作

C++ 子集相关位操作,c++,bit-manipulation,C++,Bit Manipulation,我想知道这个位操作意味着什么: for (int m = 1; m < (1 << n); ++m) { for (int s = m; s; s = (s - 1) & m) { // .... } } for(int m=1;m

我想知道这个位操作意味着什么:

for (int m = 1; m < (1 << n); ++m) {
    for (int s = m; s; s = (s - 1) & m) {
        // ....
    }
}

for(int m=1;m<(1如果
s
的形式是
..10000
,那么
s-1
就是
..01111
。然后我们用
&
m
,只剩下那些
1
m
的下半部分。(
s
的高位保持不变,并与
m
中的高位保持相同)


有效地,我们清除
s
中的最小设置位,并用
m
中的位替换所有较低的位。可以看出,这相当于“在
m
的设置位内向下计数”。也就是说,如果
m
具有
k
设置位,则从
(1用手进行几次输入。你注意到什么了吗?如果你正在钻研位操作,你可能也想看看。哇,谢谢你的链接,从来都不知道有这么多的位操作技巧!