检查是否未设置位

Pro*_*mer 9 c bit-manipulation

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

我试着用 if(!value & 4)if(~value & 4)if(value ^ 4)但他们没有工作.

das*_*ght 21

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

if((value & 4) != 0) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

if((value & 4) == 0) {
    ...
}
Run Code Online (Sandbox Code Playgroud)


Kev*_*lia 10

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

if (!(value & 4))
Run Code Online (Sandbox Code Playgroud)


Mar*_*oun 5

简单地:

if ((value & 4) == 0)
Run Code Online (Sandbox Code Playgroud)

为什么?

如果value是 01110011

然后

01110011
&
00000100
--------
Run Code Online (Sandbox Code Playgroud)

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

  • 相等运算符比按位与具有更高的优先级,并且由于“4 == 0”是“false”,可以隐式转换为零,因此按位与总是返回“false”。您必须有括号,因此 `if ((value & 4) == 0)` (2认同)