检查C中的某个位的值

The*_*ter 2 c binary bit-manipulation

我正在学习如何检查一下它的价值.我的教科书声称如下.

'即使第1位输入flags设置为1,另一位设置flags也可能使比较不真实.相反,你必须先屏蔽其它位flags,这样你比较的只有1位flagsMASK:"

if ((flags & MASK) == MASK)
puts("Wow!");
Run Code Online (Sandbox Code Playgroud)

我无法理解这个概念.

例如,让flags = 00001111MASK = 10110110.

因此,flags & MASK = 00000110.

如果我们现在比较MASK00000110,我们将比较位2和3.但是,我不是比较特定(单个)位的值的目标?

我一定是误解了这一点.如果有人能澄清我的误解并解释正确的方法,我将不胜感激.

谢谢.

AnT*_*AnT 7

  1. 条件(flags & MASK) != 0检查是否任何所述的flags由指定的位MASK被设置为1.

  2. 条件(flags & MASK) == MASK检查是否所有的的flags由指定的位MASK被设置为1.

对称地

  1. 条件(flags & MASK) == 0检查是否所有的的flags由指定的位MASK被设置为0.

  2. 条件(flags & MASK) != MASK检查是否任何所述的flags由指定的位MASK被设置为0.

在每种特定情况下选择您需要的那个.

如果你只需要检查一个比特(即MASK只包含一个比特设置为1),则条件1和2是等价的(条件3和4也是等价的).

从您引用的文本中是否MASK可以包含多个位设置为1 并不完全清楚.