ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言----更多的运算符(进阶篇十七)

2021-10-24 12:33:09  阅读:173  来源: 互联网

标签:---- ++ 逗号 运算符 进阶篇 int printf 表达式


 

  复合运算符

    算术运算符后面加=号,便成为复合运算符

      如:

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

 

标签:----,++,逗号,运算符,进阶篇,int,printf,表达式
来源: https://www.cnblogs.com/httpcc/p/15448769.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有