When does N & (1<<x) == true?

Viewed 253

I've recently been studying complete search with generating subsets using bit operations, so I've stumbled upon the following code:

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
}

This code is used to find all subsets of a set of n elements. I'm confused by the part

b&(1<<i)

Which is clearly false if the i-th bit of b is 0, but I don't see why it'd be true if the i-th bit of b is true, I mean wouldn't the result just be 2 to the power of i (which as it doesn't equal one i.e. true, should return false)?

changes: Beside that, I noticed now that I know that any number different from zero is considered true, that N & (1<<x) == true is true if x is 0 and N is odd, or x>0 and N is even, due to the preference of == over & , so N & (1<<x) == true resolves to N & ( (1<<x) == true )

4 Answers
Related