检查是否未设置位
如果我使用它: 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; }