簡體   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