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

时间:2017-02-27 07:05:08

标签: c equality bitwise-and

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

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

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

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

5 个答案:

答案 0 :(得分:5)

嗯,他们相同。

如果是bitwise AND,则两个不同值的操作数可以生成true,而对于equality,两者必须相同。

将十进制值53视为操作数。

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

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

按位运算广泛用于检查标志变量的特定位是“set”还是“unset”。

答案 1 :(得分:2)

这可用于检查某个数字是否设置了某些位,因此它与等式不同。

假设您将某个数字以二进制表示为0b00010001

你想检查是否设置了第4位,所以你需要做

if(0b00010001 & 0b00010000)
 // do something.

因此,上述两个数字不一定相等 - 但是,使用上面的检查,您可以验证0b00010001数字上是否设置了第4位。

答案 2 :(得分:1)

&bitwise AND运营商。它用于检查某个位置的位是否打开。

==是一个equality运算符,仅当两个操作数的值完全匹配时才返回true。

有关C中运算符的更多信息:https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

答案 3 :(得分:0)

如果其中任何一个匹配,则前一个将在逻辑上为真,0x000A。它不必完全等于0x000A;如果

可能是真的
if ((InterruptStatus == 0x0008) || (InterruptStatus == 0x0002))

底部代码确保它绝对等于0x000A。

答案 4 :(得分:0)

两者都不同。

==是关系运算符

&安培;是一个有点明智的运算符

来自tutorials point

  

== :检查两个操作数的值是否为equal。如果是,则条件变为true

     

&amp; :如果两个操作数都存在,则二进制AND运算符会将结果复制到结果中。

例如:

A = 12,B = 13

A == B:产生的输出为假,因为这两者是不同的

A&amp; B:输出为真

A = 0000 1100

B = 0000 1101

A&amp; B = 0000 1100 - &gt;这是12,它是一个有效的integer.so条件将是真的