Reputation: 225
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
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
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
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
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