繁体   English   中英

C操作员优先混淆

[英]C-operator precedence confusion

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

该程序返回值5,但是如何以及为什么?

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

请参阅此 ,并注意%的优先级高于+。

% precedence高于+因此

3 + 2 % 5

相当于

3 + ( 2 % 5 )

给出5

您的代码等效于:

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

请参阅运算符优先级表

首先评估2 % 5 (= 2),然后评估3 + 2 ,因此答案5

很简单,“%”比“ +”绑定更多。

3+2%5

在语义上等同于

3+(2%5)

显然是5

因为它被解释为3 + (2 % 5) 如果将2除以5 ,则余数为2 ,将其加到3得到5

解释这种方式的原因ISO C99标准的 6.5.5节中:

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

换句话说, %*/相同,因此比+-具有更高的运算符优先级。

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

2 % 5 = 2
2 + 3 = 5

mod运算符(%)的优先级高于加法运算符,因此首先计算“ 2%5”,结果为2,然后计算3 + 2,得出答案5。

暂无
暂无

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

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