无法理解循环中的测试条件

时间:2017-09-07 08:06:02

标签: c++

for (int g=1; g<=100000; g++)
{
    for (int y=0; y<20; y++)
    {
        if ( ((1<<y)&g) && (!((1<<(y+1))&g)) && ((1<<(y+2))&g) ) counter[g]++; 
    }
}

我试图了解这条if条件正在检查但仍然困惑,是否检查101?
任何人都可以解释这个if条件的测试结果吗?

1 个答案:

答案 0 :(得分:2)

内循环在101的至少22位中查找g(可能相交)位模式的数量。并且条件可以替换为

if (((g >> i) & 0b111) == 0b101) counter[g]++;