[英]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.