等式运算符与按位AND运算符的使用

new*_*777 2 c equality bitwise-and

在C语言中,我经常if以这种形式看到语句:

#define STATUS 0x000A
UINT16 InterruptStatus;
if (InterruptStatus & STATUS)
{
 <do something here....>
}
Run Code Online (Sandbox Code Playgroud)

如果我有这样的陈述,处理时间或任何其他原因会不同于为什么这不是首选/替代方式?

#define STATUS 0x000A
UINT16 InterruptStatus;
if (InterruptStatus == STATUS)
{
 <do something here....>
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

嗯,他们一样.

按位AND的情况下,两个不同的操作数值可以产生a true,而对于相等,两者必须相同.

考虑十进制值53操作数.

  • 按位AND将为条件检查(5 & 3 == 1)生成TRUE值.
  • 平等会产生一个FALSE值(5 ==3 ==> false)

所以他们不是替代品,真的.

按位运算广泛用于检查标志变量的特定位是"设置"还是"未设置".