Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 检查是否未设置位_C_Bit Manipulation - Fatal编程技术网

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