C 检查是否未设置位
如果我使用这个:C 检查是否未设置位,c,bit-manipulation,C,Bit Manipulation,如果我使用这个: 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)
或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)
为什么?
如果值为011110011
然后
将返回0,因为第4位已关闭。来自hastebin的行写得不好,代码无法访问,并且严重依赖于C运算符的优先级。而且没有像预期的那样工作
哈斯汀的台词是:
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;
}
您通常如何对布尔表达式的值求反?有点奇怪(~value&4)
对我也不起作用,我正在寻找依赖项。如果是系统特定的、inds特定的或方法特定的..那么我会更具体。我有枚举:我正在使用条件:打破循环。这是循环中唯一的条件,它不断增加,不幸的是,它永远不会消失。否则,如果位被设置,循环将成功中断。@Protogrammer这里还有第二个条件,你确定这不是罪魁祸首吗?不,因为cur\u w
的值会自由增加并等待停止。@Protogrammer你是否尝试过if((cur\u w>source.xpos+source.width)&&(source.attributes&DBOX\u HAS\u HAS\u SHADOW)==0){break;}
@Protogrammer{break;return;}
没有意义…如果这是在一个循环中,它将跳出循环,但跳过返回;
但实际上是这样。问题是基于一个外部条件干扰。对于那一次,我会做更多,js。相等运算符的优先级高于按位and,因为4==0
是false
,它可以隐式转换为零,按位并始终返回false
。如果((value&4)==0),则必须有括号
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;
}