Protogrammer
Protogrammer

Reputation: 225

Checking if bit is not set

If I use this: if(value & 4) to check if the bit is set, then how do I check if the bit isn't set?

I tried with if(!value & 4) or if(~value & 4) and if(value ^ 4) but none of them works.

Upvotes: 19

Views: 52455

Answers (4)

Maroun
Maroun

Reputation: 95968

Simply:

if ((value & 4) == 0)

Why?

If value is 01110011

Then

01110011
&
00000100
--------

Will return 0 because 4th bit is off.

Upvotes: 7

user3629249
user3629249

Reputation: 16540

the line from hastebin is poorly written, has unreachable code and depends heavily on the Precedence of the C operators. And doesn't work as expected.

The line from hastebin:

if( cur_w > source.xpos + source.width
&&
!(source.attributes & DBOX_HAS_SHADOW) )
{
    break;
    return; 
}

it should be written as:

if( (cur_w > (source.xpos + source.width))  // has curr_w exceeded sum of two other fields?
    &&
    ((source.attributes & DBOX_HAS_SHADOW) != DBOX_HAS_SHADOW ) //is bit == 0?
{
    break;
}

Upvotes: 2

Kevin DiTraglia
Kevin DiTraglia

Reputation: 26058

You could do it many ways, but the easiest (easiest as in requires the least amount of thought) would be just negate the entire expression you already have:

if (!(value & 4))

Upvotes: 18

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726579

When you write if(value & 4), C checks the result to be non-zero. Essentially, it means

if((value & 4) != 0) {
    ...
}

Therefore, if you would like to check that the bit is not set, compare the result for equality to zero:

if((value & 4) == 0) {
    ...
}

Upvotes: 34

Related Questions