在C语言中,我经常以这种形式看到if
语句:
#define STATUS 0x000A
UINT16 InterruptStatus;
if (InterruptStatus & STATUS)
{
<do something here....>
}
如果我有这样的陈述,处理时间或任何其他原因会不会是不同的首选/替代方式?
#define STATUS 0x000A
UINT16 InterruptStatus;
if (InterruptStatus == STATUS)
{
<do something here....>
}
答案 0 :(得分:5)
嗯,他们不相同。
如果是bitwise AND,则两个不同值的操作数可以生成true
,而对于equality,两者必须相同。
将十进制值5
和3
视为操作数。
5 & 3 == 1
)生成一个TRUE值。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)
两者都不同。
==是关系运算符
&安培;是一个有点明智的运算符
== :检查两个操作数的值是否为
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条件将是真的