C語言----更多的運算符(進階篇十七)


 

  復合運算符

    算術運算符后面加=號,便成為復合運算符

      如:

        i+=5;

        相當於i=i+5;

        那么i-=a+b;等價於什么?

      注意:i*=a+b;並不等價於i=i*a+b,而是等價於i=i*(a+b)

    +-*/%5個算術運算符都可以和=號組合成復合運算符,除此之外還有位運算符也可與=號組合成復合運算符。

 

  逗號運算符

 

    逗號運算符的運算順序為從左到右,計算結束后取最右邊的表達式作為運算結果。

 

      如:

 

        int a;

 

        a=(3+5,4+6);

 

        a的結果為10。

 

    在循環中經常見到:

      for(i=0;i<=100;s+=i,i++);

    用這種方式計算1加到100的和,循環體可以省掉。

 

    ※逗號運算符的優先級是C語言中最低的,比=號還低。假設a=3,下面的逗號表達式:

      b=(a=2+5,a*2)

    會先算a=2+5,再算7*2,b的最終值是14,而不是3*2得6。

 

    ※逗號表達式出現在函數調用當中,很容易混淆,如:

      func(rec1,rec2+rec3,(rec4,rec5));

    該函數調用語句中實際上只有3個函數實參,(rec4,rec5)是個逗號表達式,取變量rec5的值作為實參,差別就在於這個括號。

 

    ※逗號是表達式,分號表示一條語句結束。

  賦值表達式    

      int a=1,b=2,c,d;

      if((c=a)<(d=b)){…}

      if語句中,c=a表達式得到的結果為1,d=b得到的結果為2,相當於比較1<2,條件成立,會執行花括號中的語句。

 

    ※表達式int a=b=c=1+2;的真實運算順序如下:

      int a=(b=(c=(1+2)));

 

    ※賦值表達式也可出現在函數中,如: 

      printf(“%d\n”,(n=5));

  運算符結合性

    單目運算符(++,--,!取反,&取址,*取值,正負號)、條件運算符(在后面講解)和=號(包括復合運算)結合性都是從右向左,其它運算符都是從左向右結合,如:

    a=-i++相當於a=-(i++);

 

    int a=b=c=1+2+3;

    先算1+2是因為=號的優先級比+號低,先算后面的c=1+2是因為=號的運算符結合性是從右向左。

  ++- -

    i++等價於i=i+1

    i--等價於i=i-1

    ++i表示i先自加1,再參與運算

 

    如:

      int i=2;

      printf(“%d\n”,++i);

    輸出3,i的值為3,這條printf語句可以分解為:

      i=i+1;

      printf(“%d\n”,i);

 

    ※注意i++和i+1的區別。

      i++表示i先參與運算,再自加1

      printf(“%d\n”, i++);

      輸出2,但是i的值為3,它可以分解為:

      printf(“%d\n”,i);

      i=i+1;

 

    ※++和--只能作用於變量,不能作用於常量或表達式,如3++或(a+b)--都視為非法操作。因為++和--都會產生新值,常量或表達式都無法存放這個新值。

 

    ※如果遇見a+++b,編譯器會盡可能地從左到右組合運算符,把它變成(a++)+b,這和運算符結合性沒並有什么關系。如果你忘記了這條法則,可以自己使用括號控制運算順序。

 

    設變量已正確定義為整型,則表達式n=i=2,++i,i++的值為____

// 17-1++運算符.c
#include <stdio.h>

main()
{
    int n, i;
    //n = i = 2, ++i, i++;     //這是一條語句
    //printf("%d,%d\n", i, n); // 結果是:i = 4    n = 2
    printf("%d\n",(n=i=2,++i,i++)); 
    //結果是 i = 3    n = i = 2 中 i= 2, 然后 ++i i = 2 + 1 = 3 , 最后 輸出 i = 3  在執行 i = 3+1

}

                  

 

// 17-2運算公式.c

#include <stdio.h>
#include <math.h>
main()
{
    int x;
    double a, b, c;
    x = (-b + (sqrt((pow(b, 2) - 4 * a *c)))) / (2 * a);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM