• C语言运算符与表达式


    (一) 算术运算符

    1. 常用算术运算符

    算术运算符用于执行程序中的数学运算,C 语言中常用的算术运算符有以下 5 种:

    • 加或正值

    • 减或负值

    • * 乘

    • / 除

    • % 取余

    1. 加法或者正值运算符“+”。作为加法运算符时是双目运算符,也就是需要有 2 个操作数参与运算,例如:a+b、1+3 等。如果作为正值运算符时是单目运算符,例如:+3、+1 等。参与加法运算的操作数可以是字面量、也可以是变量:

      #include<stdio.h>
      int main()
      {
          int a=10;
          int b=20;
          printf("a+b=%d
      ",a+b);//变量相加
          printf("a+1=%d
      ",a+1);//变量与常量相加
          printf("1+1=%d
      ",1+1);//字面量与字面量相加
          printf("%d
      ",+a);
          printf("%d
      ",+100);
          getchar();
          return 0;
      }
      
    2. 减法或者负值运算符“-”。

    3. 乘法运算符“*”。

    4. 除法运算符“/”。

      【注意】两个整数相除结果为整数,两个浮点数相除结果为浮点数,如果两个操作数中有一个是浮点数,相除结果为浮点数,示例代码如下:

      #include<stdio.h>
      int main()
      {
          int i=5;
          int j=3;
          float f = i/j; //i/j 的值赋值给 f
          float f1=5.0f;
          float f2=3.0f;
          float f3=f1/f2;
          printf("%lf
      ",f);
          printf("%lf
      ",f3);
          getchar();
          return 0;
      }
      运行结果:
      1.000000
      1.666667
      

      不仅仅是除法,几乎所有运算都是:整数和整数运算结果是整数;整数和小数运算结果是小数;小数和小数的运算结果是小数。

    5. 求余运算符“%”,属于双目运算符,要求参与运算的两个操作数都必须是整数,求余运算的结果是两个数相除的余数,示例代码如下:

      #include<stdio.h>
      int main()
      {
          int a=6;
          int b=20;
          printf("%d
      ",b%a);
          getchar();
          return 0;
      }
      

    2. 算术表达式

    将算术运算符、小括号、操作数连接起来、符合 C 语言规则的式子被称为算术表达式,参与运算的操作数可以是字面量、变量、函数等。例如:a+1、a-b、1*10、20/2、30%4…..等等。

    3. 算术运算符优先级

    在数学中,算术运算有一套完整的运算规则。在 C 语言中,算术运算同样存在着规则。当算术表达式由多个不同的算术运算符组成时,会按照运算符的优先级进行运算:先乘除后加减、先括号里再括号外,优先级相同,按照自左向右的顺序进行运算,例如:a*10+(100%3)-b/10。

    小括号优先级最高,先计算(100%3)。*与/优先级相同,自左向右运算,先计算 a*10,再计算 b/10。+与-优先级相同,自左向右运算,先计算加法,再计算减法。
    和数学中一样,可以通过小括号()来改变运算优先级,不过 C 语言中只有(),没有[]、{},()可以嵌套多层。a*(10+100%(3-b)/10);

    (二) 赋值运算符和赋值表达式

    1. 赋值运算符

    赋值运算符“=”,是 C 语言中使用最多的运算符,作用是将一个值(字面量值、变量值、表达式计算结果)复制一份给另一个变量。赋值运算符常见形式:
    变量 = 表达式;
    a = 1+1; //先计算表达式 1+1,然后将结果值赋给变量 a
    变量 = 字面量;
    a= 2; //将数值 2 直接赋值给变量 a
    变量 = 变量;
    a= b; //将变量 b 的值赋值给变量 a
    示例代码如下:

    #include<stdio.h>
    int main()
    {
        int a;
        int b;
        int c;
        a=20; //将数值 20 赋值给变量 a
        b=a-10; //先计算 a-10,然后将计算结果赋值给变量 b
        c=a+b; //先计算 a+b,然后将计算结果赋值给变量 c
        printf("a=%d
    ",a);
        printf("b=%d
    ",b);
        printf("c=%d
    ",c);
        getchar();
        return 0;
    }
    

    【注意】
    赋值运算符的右边必须是变量,以下写法都是错误的:
    20=30; //错误写法
    100=a; //错误写法
    左边也不能是表达式:a+2=5; 这样也错。

    2. 赋值表达式

    将赋值运算符、小括号、操作数连接起来、符合 C 语言规则的式子被称为赋值表达式,参与运算的操作数可以是字面量、变量、表达式、函数……等。例如:a= 1+1、a=2、a=a+1、a=b 等等。

    b=a+1 的读法是“a+1 的值赋值给 b”,很显然 a=a+1 的读法是“a+1 的值赋值给 a”

    3. 赋值运算符优先级

    赋值运算符在 C 语言中优先级是最低的。赋值运算都是最后执行,例如:
    c=a*10+100%3-b/10;
    上述程序中,既有算术运算符,又有赋值运算符。因为赋值运算符优先级是最低的,因此可以将上述程序分为 2 部分看待,先执行=右边的算术表达式,然后将计算结果赋值给=左边的变量 c。

    4. 赋值表达式的结果

    前面讲过,C 语言中任何一个表达式都会产生一个结果值,赋值表达式也是如此。赋值表达式的结果就是=左边被赋值变量的值,例如:
    int a=10;
    int c =(a=a+1);
    printf("%d ",c);
    printf("%d ",c=c+1);

    5. 复合赋值运算符

    在赋值运算符前加上其他运算符,就可以构成复合运算符。例如:在“=”前加一个“-”就构成复合运算符“-=”。在 C 语言中,常用的复合赋值运算有以下几种:
    a+=10; //等价于 a=a+10;
    a-=10; //等价于 a=a-10;
    a*=10; //等价于 a=a*10;
    a/=10; //等价于 a=a/10;
    a%=10; //等价于 a=a%10;

    (三) 自增(++)、自减(--)运算符

    1. 自增(++)运算符

    自增运算符“++”由 2 个“+”组成,作用是将变量值增加 1,在 C 语言中,“++”的位置不同表达的意思也不相同,需要分 2 种情况:
    ++x; //x 先自增 1,然后再参加运算
    x++; //x 先参与运算,然后自增 1
    示例代码如下:

    #include<stdio.h>
    int main()
    {
        int a=1;
        a++;
        printf("a=%d
    ",a);
        getchar();
        return 0;
    }
    运行结果:
    a=2
    
    #include<stdio.h>
    int main()
    {
        int a=1;
        ++a;
        printf("a=%d
    ",a);
        getchar();
        return 0;
    }
    运行结果:
    a=2
    

    这样,a++和++a 都相当于 a=a+1,后面讲差别。

    2. 自增运算表达式

    将自增运算符、小括号、操作数连接起来、符合 C 语言规则的式子被称为自增运算表达式,参与运算的操作数只能是变量,不能是字面量、表达式等。
    以下都是错误写法:
    ++100 //错误写法,不能是字面量
    (a+1)++ //错误写法,不能是表达式
    前面讲过,“++”的位置不同表达的意思也不相同,下面通过例子来深入了解一下:

    #include<stdio.h>
    int main()
    {
        int a=1;
        int b=0;
        b=a++; //后++
        printf("a=%d
    ",a);
        printf("b=%d
    ",b);
        getchar();
        return 0;
    }
    运行结果:
    a=2
    b=1
    
    #include<stdio.h>
    int main()
    {
        int a=1;
        int b=0;
        b=++a; //前++
        printf("a=%d
    ",a);
        printf("b=%d
    ",b);
        getchar();
        return 0;
    }
    运行结果:
    a=2
    b=2
    

    我们知道,C 程序中表达式都会返回一个结果值,自增运算表达式也是如此。如果是“变量++”,返回变量自加之前的值;如果是“++变量”,返回变量自加之后的值。因此,上述程序中,b=a++和 b=++a 执行过程等价于以下形式:

    b=a++等价于 b=++a 等价于
    b=a;
    a=a+1;
    a=a+1;
    b=a;

    3. 自减(--)运算符

    自减运算符“--”由 2 个“-”组成,作用是将变量值减少 1。
    也分为 i--、--i 的区别。和++类似。

    (四) 关系运算符与关系表达式

    1. 关系运算符

    关系运算符又称“比较运算符”用于执行程序中的比较运算。C 语言中所有关系运算符都是双目运算符,也就是说需要两个操作数参与运算,常用的关系运算符有以下 6 种:
    < 小于
    <= 小于或等于大于
    = 大于等于
    == 等于
    != 不等于
    注意<=、>=别写反了。

    2. 关系表达式

    将关系运算符、小括号、操作数连接起来、符合 C 语言规则的式子被称为关系表达式,
    参与运算的操作数可以是字面量、变量、表达式、函数……等。例如:
    1>2 //1 是否大于 2
    1+1==b //1+1 的结果是否等于变量 b
    10*20!=c //10 乘 20 的结果是否不等于变量 c
    关系表达式的运算结果只有 2 种:0 或 1。0 表示关系表达式为假,1 表示关系表达式为
    真。例如:

    #include<stdio.h>
    int main()
    {
        int a=10;
        int b=20;
        int c=30;
        printf("%d
    ", 1 > 2);
        printf("%d
    ", 5 >= 2);
        printf("%d
    ", a < 2);
        printf("%d
    ", a <= b);
        printf("%d
    ", a+b == c);
        printf("%d
    ", c != a+b);
        getchar();
        return 0;
    }
    

    关系表达式的结果值是整数类型,因此采用%d 格式输出。

    printf("%d
    ",a==b);
    printf("%d
    ",a=b);
    不要把 a==b 写成 a=b,a=b 就是赋值表达式
    

    (五) 逻辑运算符与逻辑表达式

    1. 逻辑运算符

    逻辑运算符用于对程序中的逻辑值进行运算。在日常生活中逻辑值只有 2 种:“真”或“假”。但是 C 语言中没有逻辑类型,为了解决这个问题,采用 0 代表逻辑“假”,非 0代表逻辑“真”。
    举个例子:“李小龙是男人”是“真”,“李小龙是德国人”是“假”。
    “李小龙是男人 并且 李小龙是德国人”是“假”,“李小龙是男人 或者 李小龙是德国人”是“真”。

    C 语言提供的逻辑运算符有以下 3 种:
    && 逻辑与(并且)
    || 逻辑或(或者)
    ! 逻辑非

    逻辑与(&&)和逻辑或(||)都是双目运算符,需要两个操作数才能进行运算。逻辑非(!)是
    单目运算符,只需一个操作数即可进行运算。
    C 语言逻辑运算符表示的含义如表所示:

    运算符 名称 举例 说明
    && 逻辑与 a&&b a 和 b 都为真,结果为真,否则为假
    || 逻辑或 a||b a 或 b 有一个为真,结果为真。a 和 b 都为假时,结果才为假
    ! 逻辑非 !a a 为假,!a 结果为真;a 为真,!a 结果为假

    2. 逻辑表达式

    将逻辑运算符、小括号、操作数连接起来、符合 C 语言规则的式子被称为逻辑表达式,
    参与运算的操作数可以是字面量、变量、表达式……等。例如:
    1 && 1
    a&&1
    a || b
    1 ||b
    1>2 && 3<4
    !a

    (六) 条件运算符与条件表达式

    条件运算符由“?”与“:”两个符号组成,必须一起使用,是 C 语言中唯一的三目运算符,需要三个操作数才能进行运算。
    条件表达式的一般使用形式为:
    表达式 1?表达式 2:表达式 3
    条件表达式的运算规则为:如果表达式 1 的结果为真,以表达式 2 的值作为整个条件表达式的值,否则以表达式 3 的值作为整个条件表达式的值。例如:
    max=a>b?a:b
    如果 a>b 为真,将 a 赋值给 max,否则将 b 赋值给 max。a>b?a:b 被称为条件表达式。
    一般为了代码结构清晰,建议使用小括号将条件运算表达式包裹起来,比如:max=(a>b?a:b)。
    下面通过例子来了解一下条件运算符的使用。

    #include<stdio.h>
    int main()
    {
        int a=9;
        int b=0;
        b=(a>10?888:666);
        printf("b=%d
    ",b);
        b=(a>5?888:666);
        printf("b=%d
    ",b);
        getchar();
        return 0;
    }
    
    //使用条件运算符判断数据能否被 3 整除。
    #include<stdio.h>
    int main()
    {
        printf("%s
    ",(6%3==0)?"6 能被 3 整除":"6 不能被 3 整除");
        printf("%s
    ",(5%3==0)?"5 能被 3 整除":"5 不能被 3 整除");
        getchar();
        return 0;
    }
    
    

    (七) sizeof 运算符

    求字节数运算符“sizeof”用于计算变量、字面量、类型所占字节数。该运算符是 C 语言中唯一一个使用单词作为运算符的:
    sizeof(类型)、sizeof(字面量)、sizeof(变量)
    上述表达式的运算结果为:括号中的类型在当前系统下所占字节数。
    下面通过 sizeof 计算 C 语言中常用数据类型所占字节数。

    sizeof 计算类型所占字节数
    #include<stdio.h>
    int main()
    {
        printf("sizeof(char) =%d
    ", sizeof(char));
        printf("sizeof(int) =%d
    ", sizeof(int));
        printf("sizeof(float) =%d
    ", sizeof(float));
        printf("sizeof(double) =%d
    ", sizeof(double));
        getchar();
        return 0;
    }
    
  • 相关阅读:
    P4630-[APIO2018]Duathlon铁人两项【圆方树】
    P4980-[模板]Pólya定理
    bzoj4589-Hard Nim【FWT】
    CF700E-Cool Slogans【SAM,线段树合并,dp】
    sqrt数据结构
    NOIP历年好题
    ACM题解吖
    [ZJOI2010]排列计数
    [CQOI2014]数三角形
    [SHOI2007]书柜的尺寸
  • 原文地址:https://www.cnblogs.com/wangyueping/p/14497573.html
Copyright © 2020-2023  润新知