相等运算符与按位 AND 运算符的用法

Equality operator versus bitwise AND operator usage

在C语言中,我经常看到if这样的语句:

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

如果我有这个声明,处理时间会不会有任何不同,或者这不是 preferred/alternative 方式的任何其他原因?

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

嗯,它们相同。

如果是 bitwise AND, two different values of operands can produce a true, whereas for equality,两者必须相同。

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

  • 按位与将为条件检查生成 TRUE 值 (5 & 3 == 1)。
  • 相等会产生 FALSE 值 (5 ==3 ==> false)

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

按位运算广泛用于检查 flag 变量的特定位是 "set" 或 "unset".

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

假设您有一些用二进制表示的数字 0b00010001

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

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

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

& 是一个 bitwise AND 运算符。用于检测某个位置的某个位是否打开。

== 是一个 equality 运算符,只有当两个操作数的值完全匹配时才 returns 为真。

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

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

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

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

两者不同。

== 是关系运算符

& 有点聪明的操作符

来自tutorials point

== : Checks if the values of two operands are equal or not. If yes, then the condition becomes true.

& : Binary AND Operator copies a bit to the result if it exists in both operands.

例如:

A=12,B=13

A == B: 输出为假,因为这两个不同

A & B:输出将为真

A = 0000 1100

B = 0000 1101

A&B = 0000 1100 -> 这是 12 并且它是有效的 integer.so 条件将为真