相等运算符与按位 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,两者必须相同。
将十进制值 5
和 3
视为操作数。
- 按位与将为条件检查生成 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。
两者不同。
== 是关系运算符
& 有点聪明的操作符
== : 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 条件将为真
在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,两者必须相同。
将十进制值 5
和 3
视为操作数。
- 按位与将为条件检查生成 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。
两者不同。
== 是关系运算符
& 有点聪明的操作符
== : Checks if the values of two operands are
equal
or not. If yes, then the condition becomestrue
.& : 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 条件将为真