==优先级高于按位AND,XOR和OR的基本原理是什么?

Wil*_*mKF 9 c c++ bitwise-operators operator-precedence comparison-operators

在C++中,==和!=的优先级高于按位AND,XOR和OR的基本原理是什么?

这似乎对我来说更自然的事operator==operator!=跟从operator&,operator^operator|.我想了解动机,以便我能更好地记住订购.

例如,我认为以下类型的用法很常见:

if (bitFields & value == 0) { // Incorrect test.
  // Do Something.
}
Run Code Online (Sandbox Code Playgroud)

由于==结果是1或0,为什么你要将它用于按位运算?相反,上述内容必须写成:

if ((bitFields & value) == 0) { // Correct test.
  // Do Something.
}
Run Code Online (Sandbox Code Playgroud)

在比较为零之前获得按位AND的预期含义.

Ed *_*eal 6

  1. 这是C的历史
  2. 考虑在if语句中使用函数

例如

if (func1() == 2 & func2() == 3)
Run Code Online (Sandbox Code Playgroud)

优先级==更高,&确保调用两个函数.

  • @chris即便如此,这似乎也不足以说明优先规则.`if((func1()== 2)&(func2()== 3))`在你需要的极少数情况下写起来并不困难.然而,比较按位运算并不是那么罕见. (4认同)
  • 这似乎没有正确使用按位AND. (2认同)
  • @Ed:你的部分答案是误导性的.优先级与是否调用这两个函数无关.即使它被切换,两者仍然会被调用; 表达式的结果是唯一会改变的. (2认同)