C运算符的优先级

Precedence of C operators

我是编程新手,刚开始学习C。我想了解以下运算符的优先级

if ( p == 2 || p % 2 )

请帮助我。

这里

if ( p == 2 || p % 2 )

看起来像

if( operand1 || operand2)

其中 operand1p == 2operand2P % 2。现在逻辑或 || 真理 table 是

operand1  operand2  operand1 || operand2
0         0         0
0         1         1
1         0         1
1         1         1

从上面的table可以看出,如果第一个操作数operand1结果为真那么结果永远为真&第二个操作数operand2 没有得到评估

operand1 是 ==>

  • p == 2(假设 p2

  • 2 == 2 结果为真,因此 operand2 没有被评估, if 块看起来像

    if(true) { }

让我们假设 p3 然后 operand12 == 3 是假的 即 operand2 被评估即 3%21 这意味着 if 块看起来像

if(true)
{
}

让我们假设 p4 然后 operand12 == 4 是假的 即 operand2 被评估 即 4%20 这意味着 if 块看起来像

if(false)
{
}

希望以上解释对您有所帮助。

关于结合律和优先级,请看manual page of operator

参考Precedence Of Operators and .

  • 优先级:运算符优先级决定了当有多个运算符且它们具有不同的优先级时,运算符和操作数在表达式中如何分组。

  • 结合性:当两个相同优先级的运算符出现在一个表达式中时,使用运算符结合性。

由于存在||,所以需要先对||的左边求值,以决定是否需要对||的右边进行处理。 如果 p == 2 returns 为真,p % 2 将不会被计算。

因此p == 2会先执行,然后是p % 2(因为%的优先级高于||)。

然后将根据 ||.

评估这 2 个的结果