加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – N&(1 << x)=何时为真?

发布时间:2020-12-16 10:37:27 所属栏目:百科 来源:网络整理
导读:我最近一直在研究使用位操作生成子集的完整搜索,所以我偶然发现了以下代码: for(int b = 0; b (1n); b++) { vectorint subset; for(int i = 0; i n; i++) { if( b(1i)) subset.push_back(i); } //use subset here} 此代码用于查找一组n个元素的所有子集.我
我最近一直在研究使用位操作生成子集的完整搜索,所以我偶然发现了以下代码:

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
}

此代码用于查找一组n个元素的所有子集.我对这部分感到困惑

b&(1<<i)

如果b的第i位为0,这显然是假的,但我不明白为什么如果b的第i位是真的那么它是真的,我的意思是结果不是2 i的力量(因为它不等于一个即真,应该返回假)?

变化:
除此之外,我现在注意到我知道任何与零不同的数字都被认为是真的,N& (1<< x)== true如果x为0且N为奇数,或者x> 0且N为偶数,则为真,这是由于== over&的偏好.所以N& (1<< x)== true解析为N& ((1<< x)== true)

解决方法

你有一个小小的误解……

which as it doesn’t equal one i.e. true,should return false )

事实是:只有0被转换为false而其他所有数字都变为true.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读