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。
你能做什么:
- 添加括号:
while ( (func() & DEFINED_CONST) == DEFINED_CONST )
- 如果DEFINED_CONST 只设置了一位,则不进行比较。足以:
while ( func() & DEFINED_CONST)
我对图书馆做类似的事情感到很困惑:
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。
你能做什么:
- 添加括号:
while ( (func() & DEFINED_CONST) == DEFINED_CONST )
- 如果DEFINED_CONST 只设置了一位,则不进行比较。足以:
while ( func() & DEFINED_CONST)