繁体   English   中英

C 运算符优先级 == 和 &

[英]C operator Precedence == and &

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

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

我正在编译 C99 严格的 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM