[英]C-operator precedence confusion
main()
{
int a=3+2%5;
printf("%d",a);
}
该程序返回值5,但是如何以及为什么?
因为您的算术表达式解析为3+(2%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.