Mar*_*nev 3 c++ bit-manipulation c++11
我最近一直在研究使用位操作生成子集的完整搜索,所以我偶然发现了以下代码:
for(int b = 0; b < (1<<n); b++) {
vector<int> subset;
for(int i = 0; i < n; i++) {
if( b&(1<<i)) subset.push_back(i);
}
//use subset here
}
Run Code Online (Sandbox Code Playgroud)
此代码用于查找一组n元素的所有子集.我对这部分感到困惑
b&(1<<i)
Run Code Online (Sandbox Code Playgroud)
这是如果的第i位明显是假b的0,但我不明白为什么它会是 true如果的第i位b是true,我的意思是不会结果只是2给力i(这因为它不等于一个即真,应该返回false)?
变化:在那旁边,我现在发现,我知道,任何数量从零不同的考虑true,那N & (1<<x) == true如果是真的x是0和N是奇数,或x>0和N均匀,由于偏好==过&,所以N & (1<<x) == true解析N & ( (1<<x) == true )
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |