C运算符优先级混乱

时间:2010-11-24 15:08:13

标签: c

main()
{
  int a=3+2%5;
  printf("%d",a);
}

程序返回值5,但是&为什么呢?

7 个答案:

答案 0 :(得分:5)

因为您的算术表达式解析为3+(2%5)

请参阅此table,并注意%优先于+。

答案 1 :(得分:1)

%的{​​{3}}高于+所以

3 + 2 % 5

相当于

3 + ( 2 % 5 )

给出了5

答案 2 :(得分:0)

您的代码相当于:

main() { 
    int a = 3 + (2 % 5); 
    printf("%d",a); 
}

请参阅operator precedence table

首先评估

2 % 5(= 2),然后是3 + 2,因此答案5

答案 3 :(得分:0)

很简单,'%'超过'+'。

3+2%5

在语义上等同于

3+(2%5)

显然是5

答案 4 :(得分:0)

因为它被解释为3 + (2 % 5)。当您将2除以5时,剩余部分为2,并将其添加到3会为您提供5

原因它的解释方式是ISO C99 standard6.5.5部分:

multiplicative-expression:
    cast-expression
    multiplicative-expression * cast-expression
    multiplicative-expression / cast-expression
    multiplicative-expression % cast-expression

换句话说,%的处理方式与*/相同,因此运算符优先级高于+-

答案 5 :(得分:0)

模数的计算与乘法和除法的优先级相同。

2 % 5 = 2
2 + 3 = 5

答案 6 :(得分:0)

mod运算符(%)优先于加法运算符,因此首先计算“2%5”,得到2,然后计算3 + 2,得到答案5.