C 运算符优先级 == 和 &

C operator Precedence == and &

我对图书馆做类似的事情感到很困惑:

while ( func() & DEFINED_CONST == DEFINED_CONST )
{
...
}

我正在编译 C99 strict ansi。我认为 == 的优先级高于 &。如果是这种情况,DEFINED_CONST == DEFINED_CONST 的评估将是第一个。这完全是无稽之谈。由于这个例子来自一家我认为不会提供这种废话的公司,所以我问我,我的知识滞后在哪里,我错了什么。

这样做是有意义的:(func() & DEFINED_CONST) == DEFINED_CONST,但由于 == 的优先级更高,我认为它会像 func() & (DEFINED_CONST == DEFINED_CONST).

那样被评估

所以我哪里错了。

对于背景,func() 正在读取寄存器。

是的,你是对的,那个代码可能是错误的,它和

一样
func() & (DEFINED_CONST == DEFINED_CONST)

可能代码应该是

(func() & DEFINED_CONST) == DEFINED_CONST

如果您编译您的代码,编译器会告诉您问题所在:https://godbolt.org/z/61edYq

此时此表达式检查是否在 func 返回的值中设置了 LSBit。

你能做什么:

  1. 添加括号:
while ( (func() & DEFINED_CONST) == DEFINED_CONST )
  1. 如果DEFINED_CONST 只设置了一位,则不进行比较。足以:
while ( func() & DEFINED_CONST)