C ++二进制运算符优先顺序

时间:2008-09-22 09:36:02

标签: c++ binary-operators

以下参数测试的顺序是什么(在C ++中)?

if (a || b && c)
{
}

我刚刚在我们的应用程序中看到了这个代码,我讨厌它,我想添加一些括号来澄清顺序。但我不想添加括号,直到我知道我将它们添加到正确的位置。

编辑:已接受的答案&跟进

此链接有更多信息,但并不完全清楚它的含义。好像||和&&是相同的优先级,在这种情况下,它们从左到右进行评估。

http://msdn.microsoft.com/en-us/library/126fe14k.aspx

5 个答案:

答案 0 :(得分:7)

[http://www.cppreference.com/wiki/operator_precedence](通过谷歌搜索“C ++运算符优先级”)

该页面告诉我们,第13组中的&&amp ;;优先级高于||在第14组中,表达式相当于|| (b&& c)。

不幸的是,维基百科文章[http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence]不同意这一点,但由于我的桌面上有C89标准并且它同意第一个网站,我将修改维基百科文章。

答案 1 :(得分:4)

来自here

a || (b && c)

这是默认优先级。

答案 2 :(得分:2)

&安培;&安培; (布尔AND)的优先级高于|| (布尔OR)。因此以下内容完全相同:

a || b && c
a || (b && c)

一个好的助记符规则是记住AND就像乘法,OR就像加法。如果我们用*替换AND和用+替换OR,我们得到一个更熟悉的等价物:

a + b * c
a + (b * c)

实际上,在布尔逻辑中,AND和OR的作用类似于这些算术运算符:

a  b   a AND b   a * b   a OR b   a + b
---------------------------------------
0  0      0        0       0        0
0  1      0        0       1        1
1  0      0        0       1        1
1  1      1        1       1        1 (2 really, but we pretend it's 1)

答案 3 :(得分:0)

回答后续问题:显然,MSDN上的表格很糟糕,可能是某些人无法做一个像样的HTML表格(或使用Microsoft工具来生成它!)。 我想它看起来应该更像Rodrigo引用的维基百科表,我们有明确的子部分 但很明显,接受的答案是正确的,不知何故,我们与&&和||例如,与*和+相比 你给的片段对我来说清晰明确,但我想加括号也不会伤害。

答案 4 :(得分:-2)

我不确定,但你应该很容易找到答案。

只需创建一个带有语句的小程序,该语句打印出以下内容的真值: (true || false&& true)

如果结果为真,那么||优先级高于&&,如果是falase,那就相反了。