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);
}

 

posted @ 2021-10-24 12:16  httpcc  阅读(493)  评论(0编辑  收藏  举报