C语言-运算符

一, 运算符:

 连接操作数的一个符号,主要用于算术计算或者逻辑判断

 分类:

 1)参与运算的操作数的个数:单目运算(sizeOf() i++   双目运算  三目运算 (条件运算符)

 2)功能上:算术运算符     关系和逻辑运算符    位运算符

 优先级:

 不同的运算符的计算先后顺序

  结合性:

  前提:优先级相同

 在优先级相同的情况下,到底先计算哪个

二、算术运算符包括哪些?

 +     -(减)   *   /    %

  算术运算符是一个双目运算

  优先级:不同的运算符的执行的先后顺序

  结合性:左结合   a+3-2+b  // + - +  --->优先级4

  注意事项

 % 求余

 m%n

 1)注意:

 m = 0 结果是0

 n = 0 没有意义

 m > n 正常取余

 m < n 结果是m

  2)求余的正负性

 求余的正负性取决于m的正负性

 3)求余只能用于整数  int i = 10.5%2 错误 

三 , 数据类型转换问题

 数据类型转换分为强制转换和隐式转换两种:

强制转换: 

  char c = 'A' ;    int b = a +(int)c;  //把字符型c强制转换为int

隐式转换:

  int a = 10; float b = 0.5f; double f = a + b; // int类型的a 和float类型的b自动转换成double类型

四 :赋值运算符

   简单赋值运算:int a = 10+1; a = b = 10; // 注意从右往左,因为赋值运算符优先级最低,

                注意:不能赋值给常量  10 = a+b(错误)

                因此if函数中得条件我们为了防止少写一个“=”号(编译器不会报错)我们一般将常量写在左边

  复合赋值运算: 

                       +=   a+=3   // a = a+3;

                      -=   a-=3    // a = a-3;

                       *=

                        /=

                       %=

   同样赋值运算符的计算首先考虑的是运算符的优先级,然后同优先级的情况下考虑结合顺序

五 : 自增、自减

      1>  i++  ,表示先取出i的值作为表达式的值  a + i++   -->a + 5, a = 6;   ++i  ,表示先让变量值+1,然后再取出i的作为表达式的值 进行计算

      2>i++ 先用后变,  ++i 先变后用

  3> int a = 10;

          将a加1有四种方式

    (1) a = a+1  , (2) a +=1;  (3) a++; (4) ++a;

     注意:int d=1++;//这种写法是错误的,因为对常量进行自加和自减没有任何意义。

  int i = 5, j = 5, p, q;

    // 5/6 + 6/7 + 7/8

    p=(i++)+(i++)+(i++); 

    q=j+++j+++j++;

    printf("%d,%d,%d,%d",p,q,i,j);  //18 18 8 8

六: sizeof运算符

  作用:计算常量、变量、数据类型在内存中分配的字节数

  注意:sizeof(char) // 1个字节 ;表示程序要内存分配char数据类型1个字节内存空间

              sizeof('a') // 4个字节;字符常量在内存中以他的ascii码存储 65 -->int

     sizeof("aa") // 3个字节; c语言中得字符串是由字符数组构成一个字符占1个字节并且字符串结束由结尾(表示字符串结束)

    1)sizeof作用常量和变量的时候,括号可以省略

    2)sizeof不能计算函数占用的字节数

七,逗号运算符

  逗号运算符:“,” 

     逗号表达式:用“,”将多个表达式连接到一起,组成一个新的表达式,这个新的表达式就称之为 逗号表达式

  d=(a+3,b*4)  //逗号表达式

     d=((a+3,b*4),a+b)  //嵌套

  求值的过程:

     分别求每个表达式的值(从左到右依次执行),最后一个子表达式的值作为整个表达式的值返回

  特别:for(int i=0,b=3;i<4;i++,j--)   

#pragma mark 排序

void sort_list(PNODE pHead)

{

    int i, j;

    PNODE p, q;

    for (i = 0, p = pHead->pNext; i<length_list(pHead)-1; i++, p = p->pNext) {      

        for (j = i+1, q = p->pNext; j<length_list(pHead); j++, q = q->pNext) {

            if (p->date>=q->date) {

                int temp ;

                temp = p->date;

                p->date = q->date;

                q->date = temp;

            }

八,关系运算符

  一)条件判断

  默认情况下。在程序中写出的每一句正确的代码都会被执行,但很多时候我们需要在某个条件成立的情形下才执行某一段代码,如登录操作,这种情况可以使用条件语句来完成。

   (二)真假

  在C语言中,条件成立称为“真”,条件不成立称为“假”。

  C语言规定,任何数值都有真假性,任何非零值都为真,只有0才为假,无布尔类型。

 (三)关系比较

  关系运算的结果只有两种情况,如果条件成立就为真,值为1,如果条件不成立就为假,值为0。有6种运算符,分别是:(1)<  (2)<=  (3) >  (4) >=  (5)==  (6)!=

九,逻辑运算符

  逻辑运算的结果只有两个:真(0)和假(1)

  ①. 与   &&   条件1&&条件2 只有的那个条件1和条件2都成立时,才为真否则为假。

  ②. 或   ||    条件1 ||条件2  当条件1或条件2中有一个成立时就为真,都不成立时为假。

  ③. 非   !  !条件   取反

  注意:逻辑运算符在进行运算时,只要能够确定整体的真假性,后面的条件就不再进行而是直接忽略。

  Int a=b=10;

  Int c=(a>5)&&(++b>=11);//此时a==10,b==11,c==1

  Int c=(a<5)&&(++b>=11);//此时a==10,b==10,c==0

  提示:在进行逻辑运算时,如果搞不清楚各个符号的优先级,可以使用()。

    逻辑短路  

     int x, y, z; x = y = z = 0;     ++x || ++y && ++z 执行后y的值   

    因为&&的运算符优先级高于||,所以会先结合,但并没有计算,因为++x表达式为1,||后面的表达

    式就不会参与运算了;

  注意:逻辑短路问题:

    

// 逻辑与的 短路问题

    // b 已经是0,结果一定是0 所以,后面的 (c=b+5,c++) 不执行了

    //result = b && (c=b+5,c++);   // 0     0

    // 逻辑或的短路问题

    //       2     a是2为真(满足一真为真),|| 后面的不执行了

    //result = a || (c=b+5,c++);

 十, 条件表达式

  格式: 表达式1  ? 表达式2 :表达式3;

  要求比较a和b的值,把数值大的存入到c中  c=a>b?a:b

  比较a,b,c三个数的值,把最大的值存入到d中

  Int  abmax=(a>b)?a:b;

  d=abmax>c:abmax:c;

 

   

原文地址:https://www.cnblogs.com/-boy/p/4019926.html