如果我使用这个:
if(value & 4)
检查该位是否已设置,然后如何检查该位是否未设置?
我试过了
if(!value & 4)
或if(~value & 4)
和if(value ^ 4)
,但都不起作用。
答案 0 :(得分:20)
当您编写if(value & 4)
时,C会检查结果是否为非零。基本上,它意味着
if((value & 4) != 0) {
...
}
因此,如果您想检查该位是否而不是,请将相等的结果与零进行比较:
if((value & 4) == 0) {
...
}
答案 1 :(得分:8)
你可以采取多种方式,但最简单的(最简单的,需要最少的思考)只会否定你已经拥有的整个表达方式:
if (!(value & 4))
答案 2 :(得分:4)
简单地:
if ((value & 4) == 0)
为什么?
如果value
是01110011
然后
01110011
&
00000100
--------
因为第4位关闭,将返回0。
答案 3 :(得分:0)
来自hastebin的行写得不好,代码无法访问,并且在很大程度上取决于C运算符的优先级。而且没有按预期工作。
来自hastebin的行:
if( cur_w > source.xpos + source.width
&&
!(source.attributes & DBOX_HAS_SHADOW) )
{
break;
return;
}
应该写成:
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;
}