Home > OS >  Why is a bit-wise AND necessary to check if a bit is set in C ?
Why is a bit-wise AND necessary to check if a bit is set in C ?

Time:07-28

I was learning a backtrack problem with memoization using bit-mask today. When checking if the ith bit is set in a bit-mask, all the solutions I came across were doing (mask >> i) & 1. I was wondering why the & 1 is necessary. Isn't (mask >> i) a 1 when the ith bit is set and a 0 when the bit is not set, which already translate into true and false?

The language is C by the way. Thanks!

CodePudding user response:

(mask >> i) cannot eliminate the higher bits.

For example, when mask = 5 (101 in binary) and i = 1, the value of (mask >> i) is 2. This evaluated as true, but the 2nd lowest bit is 0, so you fail to check the bit correctly.

Therefore, & 1 is necessary to eliminate the higher bits and check one specified bit correctly.

CodePudding user response:

The expression (mask >> i) keeps all the bits from the i-th. That means, if either the i-th, (i 1)-th, etc. is set, then it'll evaluate to true in an if-expression.

CodePudding user response:

For example if you want to check the zero bit for the mask 0b10 then the expression mask >> 0 yields the same value 0b10 that is not equal to 0. However its zero bit is equal to 0. So you need to write ( mask >> 0 ) & 1 or in general ( mask >> i ) & 1.

That is higher bits that precede the i-th bit can be unequal to 0. Thus the expression mask >> i does not change their values. So the value of the expression can be unequal to 0 though the i-th bit itself is equal to 0.

  • Related