Checking if bit is not set

前端 未结 4 1036
挽巷
挽巷 2020-12-31 07:30

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

相关标签:
4条回答
  • 2020-12-31 07:40

    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))
    
    0 讨论(0)
  • 2020-12-31 07:44

    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;
    }
    
    0 讨论(0)
  • 2020-12-31 07:45

    Simply:

    if ((value & 4) == 0)
    

    Why?

    If value is 01110011

    Then

    01110011
    &
    00000100
    --------
    

    Will return 0 because 4th bit is off.

    0 讨论(0)
  • 2020-12-31 08:03

    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) {
        ...
    }
    
    0 讨论(0)
提交回复
热议问题