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用手进行几次输入。你注意到什么了吗?如果你正在钻研位操作,你可能也想看看。哇,谢谢你的链接,从来都不知道有这么多的位操作技巧!