检查是否未设置位

如果我使用它: if(value & 4)来检查该位是否设置,那么如何检查该位是否未设置?

我尝试使用if(!value & 4)if(~value & 4)if(value ^ 4)但它们都不起作用。

当你写if(value & 4) ,C检查结果是否为非零。 从本质上讲,这意味着

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

因此,如果要检查该位是否设置,请将相等的结果与零进行比较:

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

你可以用很多方法做到这一点,但最简单的(最简单的,需要最少的思考)只会否定你已经拥有的整个表达方式:

 if (!(value & 4)) 

只是:

 if ((value & 4) == 0) 

为什么?

如果value 01110011

然后

 01110011 & 00000100 -------- 

将返回0,因为第4位关闭。

来自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; }