• C语言编程入门之--第五章C语言基本运算和表达式-part3


    5.3  挑几个运算符来讲  

      常用的运算符除了加减乘除(+-*/)外,还有如下:

      注意:以下运算符之间用逗号隔开,C语言中也有逗号运算符,这里不讲逗号运算符。

     1. 赋值运算符 =,+=,*= 

     2. 一元运算符 ++, --

     3. 相等运算符 ==,!=  ,关系运算符 < ,>,<=,>=  

     4. 条件运算符 ?:

     6. 位运算符 &, ^, |  ,! 逻辑运算符 &&, ||,  移位运算符 >>, <<

     5.3.1 赋值运算符

       给变量赋值,可以通过“=”连接,将右边的数值赋值给左边的变量,如:

    int a = 10;
    int b;
    b = 10;

      赋值运算符中还能够做加减乘除与或非等等的运算,如:

    #include <stdio.h>
    
    void main()
    {
        int a = 10;
        
        a += 100;
        printf("a = %d 
    ", a);
    }

      运行结果为:a = 110;

        上述a += 100 等价于 a = a + 100; 以此类推, a -= 100 等价于 a = a - 100; a *= 100; 等价于 a = a * 100 ......后续讲到的&,^,| 等位运算符也能结合“=”凑合着来使用。

     5.3.2 一元运算符,增增,减减

       C语言中一元运算符,有加加++和减减--,但是没有乘乘**和除除//。因为++的意思是变量加一,--的意思是变量减1,所以没有必要**和//,因为变量乘以1和除以1都是等于变量本身。

      因为++和--的意思类似,所以就挑++来讲解。
      ++可以放在变量前面,也可以放在变量后面,意思不同,写法如下:

    int a = 10;
    ++a;
    a++;

      ++a是先进行自增1的运算,然后进行其它的操作,a++是先进行其它操作,然后再进行自增1的运算,这么说不好理解,如下代码:

    #include <stdio.h>
    
    void main()
    {
        int a = 0;
        int b = 10;
        
        a = ++b;
    
        printf("a = %d b = %d
    ", a, b);
    }

      运行结果是:a = 11 b = 11; 代码中,a在变量声明的时候赋值为0,b赋值为10,在运算表达式中,a = ++b; 先进行b的自增运算,这时候b就变为了10+1 = 11,然后赋值给a,a的取值就变为11了,再看下一段代码:

    #include <stdio.h>
    
    void main()
    {
        int a = 0;
        int b = 10;
        
        a = b++;
    
        printf("a = %d b = %d
    ", a, b);
    }

      运行的结果是:a = 10 b = 11;代码中,a在变量声明的时候赋值为0,b赋值为10,在运算表达式中,a = b++;先进行a = b 的赋值运算,然后再进行b = b + 1 的自增运算,所以a的取值就是10,b的取值为11。

      如果++b和b++是完整的一句表达式,

      注意:完整的一句表达式以分号;作为为这句结束的标识。

      也就是,

    #include <stdio.h>
    
    void main()
    {
        int a = 0;
    
        ++a;
    
        printf("a = %d
    ", a);
    }

    #include <stdio.h>
    
    void main()
    {
        int a = 0;
    
        a++;
    
        printf("a = %d
    ", a);
    }

        它们的运行结果是一致的,因为完整的一句表达式中,没有其它的操作,所以就只做了自增1的操作。所以请记住:++a是先进行自增1的运算,然后进行其它的操作,a++是先进行其它操作,然后再进行自增1的运算

        熟悉了以上概念就可以思考以下结果:

    int a, b, c, d,e, f, g, h;
    
    a = 10;
    b = (a++) + (a++) + (a++);
    a = 10;
    c
    = (++a)+ (++a) + (++a); a = 10;
    d
    = (++a) + (a++) + (a++);

    a = 10;
    e = (a--) + (a--) + (a--);
    a = 10;
    f = (--a)+ (--a) + (--a); a = 10;
    g = (--a) + (a--) + (a--);
    a = 10;
    h = (a--) - (a++) + (++a) - (--a);

      请问b,c,d,e,f,g,h的取值为多少?不理解的话可以再次回顾刚才的概念,然后加printf语句来核对结果。

     5.3.3 和bool值有关的相等运算符与关系运算符

       第四章的时候有讲过一种数据类型叫做 bool,它的取值就两种,true,false。计算机语言是二进制,内存中,true等于1,false等于0,如以下代码,

    #include <stdio.h>
    #include <stdbool.h>
    
    void main()
    {
        printf("%d , %d 
    ", true, false);
    }

     运行结果为 1 , 0;所以更加清晰的了解了,真true的值为1,假false的值为0。

     注意:需要声明头文件 stdbool.h 才可以使用 bool 变量,才可以打印 true 和 false 的值。

     有了以上概念,就可以理解相等运算符的取值了,比如两个等于号 == ,意思为这两个取值是否相等,是的话运算结果值为1,不是的话运算结果值为0。

     注意:千万不要把赋值运算符 = 与相等运算符 == 混淆了!后续讲解条件语句会再提到这点。

     感叹号加上等号 != ,意思为这两个值是否不相等,是的话运算结果值为1,不是的话运算结果值为0。代码如下:

    #include <stdio.h>
    #include <stdbool.h>
    
    void main()
    {
        int a = 10;
        int b = 5;
        bool c; 
        
        c = (a == b);
        
        printf("c = %d 
    ", c); 
    }

      运行结果为,c = 0;所以c的值就说明了 a == b 是假,也就是 a 和 b 相等是不成立的。

      注意:读者可以自行改代码,把 b = 5 改为 b = 10 ,就能发现,c的值变为1了,说明这时 a 等于 b 成立。

      把代码稍微修改一下,把 a == b 改为, a != b 如下:

    #include <stdio.h>
    #include <stdbool.h>
    
    void main()
    {
        int a = 10;
        int b = 5;
        bool c;
        
        c = (a != b);
        
        printf("c = %d 
    ", c);
    }

      运行结果为,c = 1;说明 a 不等于 b 是成立的,所以运算结果值取1。

      同理,小于号 < 取运算结果,左边是否小于右边,是的话运算结果值取1,否的话运算结果值取0;

      小于等于号 <= ,大于号 > ,大于等于号 >= 也都是这样的用法。

     5.3.4 条件运算符

       问号加上冒号就组成了条件运算符的表示 ?: ,使用方式一般套用以下格式:

    条件 ? 表达式1 : 表达式2

            条件其实也是一种表达式,只不过条件的取值是 bool 值,如果取值是true(1),运算表达式1,如果取值是false (0),运算表达式2,代码如下,

    #include <stdio.h>
    #include <stdbool.h>
    
    void main()
    {
        int a = 10;
        int b = 5;
        
        (a > b) ? (++a) : (++b);
        
        printf("a = %d, b = %d
    ", a, b);
    }

      运行结果为:a = 11, b = 5;  在表达式 (a > b) ? (++a) : (++b); 中, 先判断 a 是否大于 b,结果是大于,所以选择问号后面的表达式 ++a 来运算。

      后续讲到宏定义的时候会再次涉及条件运算符做个小功能,这里mark一下。

  • 相关阅读:
    C# 委托/Func() 中 GetInvocationList() 方法的使用 | 接收委托多个返回值
    蒋廷黻著《中国近代史》-中国近代屈辱史读后感
    ASP.NET Core 上传多文件 超简单教程
    Python
    Python
    Python
    Python
    Python
    Python
    Python
  • 原文地址:https://www.cnblogs.com/songsongman/p/11353178.html
Copyright © 2020-2023  润新知