第三章:运算符


本章目标

  1. 算术运算符
  2. 关系运算符
  3. 逻辑运算符
  4. 赋值运算符
  5. 三元运算符
  6. 位运算符

本章内容

1、算术运算符

  1. 概念:算术运算符即完成特定算术运算的符号,C# 中支持的算术运算符如下表所示:(假设变量 A = 10,变量 B = 20)

    1707148655428

  2. 案例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int num1 = 10, num2 = 2;
    int jia = num1 + num2;
    int jian = num1 - num2;
    int cheng = num1 * num2;
    int chu = num1 / num2;
    int yu = num1 % num2;

    Console.WriteLine("{0}+{1}={2}", num1, num2, jia);
    Console.WriteLine("{0}-{1}={2}", num1, num2, jian);
    Console.WriteLine("{0}*{1}={2}", num1, num2, cheng);
    Console.WriteLine("{0}/{1}={2}", num1, num2, chu);
    Console.WriteLine("{0}%{1}={2}", num1, num2, yu);

    注意事项:

    除数不能为0,当除数为0时,会出现异常。

    1707149147038

  3. ++,–运算符

    1. ++运算符

      • 概念:递增运算符,每次加1

      • 注意事项:++在变量名前后作用不同

      • ++在变量前:先运算,再操作

        1
        2
        3
        int a=10;
        int b=++a;
        Console.WriteLine("a:{0},b:{1}",a,b);//输出结果为->a:11,b:11,可见a自动加1
      • ++在变量后:先操作,再运算

        1
        2
        3
        int a = 10;
        int b = a++;
        Console.WriteLine("a:{0},b:{1}", a, b);////输出结果为->a:11,b:10,可见a自动加1,但是在赋值时a的值不变,则为先赋完值,a的值才+1
    2. –运算符与++运算符原理类似,讲解略

2、关系运算符

  1. 概念:比较运算符在逻辑语句中使用,以测定变量或值是否相等,返回结果肯定是bool类型 。假设变量 A 的值为 10,变量 B 的值为 20,则:

    1707149938560

  2. 案例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    int a = 10;
    int b = 20;

    bool isResult = a > b;
    bool isResult2 = a < b;
    bool isResult3 = a == b;

    Console.WriteLine("isResult1:{0},isResult2:{1},isResult3:{2}", isResult, isResult2, isResult3);//输出结果:isResult1:False,isResult2:True,isResult3:False

    注意事项:

    通常情况下,关系运算符是用在选择结构或循环结构中作为条件使用

3、逻辑运算符

  1. 概念:逻辑运算符用于判定变量或值之间的逻辑。也是将多个比较运算结果组合成新的条件结果。 假设变量 A 为布尔值 true,变量 B 为布尔值 false,则:

    1707150263874

  2. 详细讲解:

    1. &&逻辑与运算符:

      多个条件全部为true,则为true,只要有一个条件不满足为false,则后面的所有条件都不会判断,直接返回false。

      简单说:全部为true返回结果为true

      案例1:

      1
      2
      3
      4
      int a=10,b=20;

      bool isRes1=a>10 && b>10;//结果为false,a>10为false,则后面的条件b>10不会执行,直接返回false
      bool isRes2=a>=10 && b>10;//结果为true,a>=10为true,后面条件继续判断b>10也为true,则返回true

      思考如下题目,且分析:

      题目一:如下代码,请问isTrue为true还是false,变量a,b,c的值分别是多少?为什么?

      1
      2
      3
      4
      5
      6
      7
      8
      int a = 10;
      int b = 11;
      int c = 11;

      int isTrue = a++ >= b && ++b > c--;

      Console.WriteLine("isTrue:" + isTrue + ",a=" + a + ",b=" + b + ",c=" + c);
      Console.ReadLine();

      题目二:如下代码,将a++变成了++a,请问isTrue为true还是false,变量a,b,c的值分别是多少?为什么?

      1
      2
      3
      4
      5
      6
      7
      int a = 10;
      int b = 11;
      int c = 11;

      bool isTrue = ++a >= b && ++b > c--;//将++放在a前面,结果又是什么?

      Console.WriteLine("isTrue:" + isTrue + ",a=" + a + ",b=" + b + ",c=" + c);
    2. ||逻辑或运算符:

      只要满足一个条件为true,则结果就为true,所有条件为false才能为false,在比较过程,只要有一个条件满足为true,则后面的条件不再进行比较。

      简单说:全部条件为false,才能是false

      案例:

      1
      2
      3
      4
      5
      6
      7
      8
      案例1
      int a=10;
      int b=11;
      bool isTrue=a>10 || b>10;//返回结果为true,因为b>10返回为true,结果则为true
      案例2
      int a=10;
      int b=11;
      bool isTrue=a>10 || b<10;//返回结果为false,两个比较都返回为false,则结果为false
      1. 思考如下题目,且分析:

        题目一:如下代码,请问isTrue为true还是false,变量a,b,c的值分别是多少?为什么?

        1
        2
        3
        4
        5
        6
        7
        8
        int a = 10;
        int b = 11;
        int c = 11;

        int isTrue = a++ >= b || ++b > c--;

        Console.WriteLine("isTrue:" + isTrue + ",a=" + a + ",b=" + b + ",c=" + c);
        Console.ReadLine();

        题目二:如下代码,将a++变成了++a,请问isTrue为true还是false,变量a,b,c的值分别是多少?为什么?

        1
        2
        3
        4
        5
        6
        7
        int a = 10;
        int b = 11;
        int c = 11;

        bool isTrue = ++a >= b || ++b > c--;//将++放在a前面,结果又是什么?

        Console.WriteLine("isTrue:" + isTrue + ",a=" + a + ",b=" + b + ",c=" + c);
    3. !逻辑非运算符:

      理解:比较结果为true,则返回最终结果为false,比较结果为false,则返回最终结果为true

      简单理解:取反

      1
      2
      3
      4
      int a=10;
      int b=11;
      bool isTrue=!(a>b);//结果为true
      bool isTrue2=!(a<b);//结果为false

4、赋值运算符

  1. 概念:赋值运算符顾名思义就是用来为变量赋值的,下表列举了 C# 中支持的赋值运算符:

    1707188801601

  2. 案例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int a = 10, b = 2;
    b += a;//相当于b=b+a;
    Console.WriteLine("b+=a->b={0}", b);
    b -= a;
    Console.WriteLine("b-=a->b={0}", b);
    b *= a;
    Console.WriteLine("b*=a->b={0}", b);
    b /= a;
    Console.WriteLine("b/=a->b={0}", b);
    b %= a;
    Console.WriteLine("b%=a->b={0}", b);
    Console.ReadLine();

    1707189134904

5、三元运算符

  1. 语法:

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

    当条件成立为true,则返回表达式1,否则返回表达式2。

  2. 案例:

    1
    2
    3
    4
    5
    int score = 90;

    string res = score >= 90 ? "优秀" : "继续努力";
    Console.WriteLine(res);//score>=90为true,则输出“优秀”
    Console.ReadLine();

6、位运算符(选学)

  1. 概念:位运算符用来对二进制位进行操作,学习之前必须弄懂二进制,&、| 和 ^ 的真值表如下:

    1707189819245

  2. 案例:假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

    A = 0011 1100

    B = 0000 1101

    1
    2
    3
    4
    5
    6
    7
    A&B = 0000 1100

    A|B = 0011 1101

    A^B = 0011 0001

    ~A = 1100 0011
  3. 下表列出了 C# 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

    1707189919232

    位与运算符:&

    将两个数的比特位进行合并,返回一个新数。只有这两个数相同比特位都是 1 的时候才能返回1。

    位或运算符:|

    将两个数的比特位进行合并,返回一个新数。这两个数相同比特位只要有一个是 1 就返回1。

    位异或运算符:^

    将两个数的比特位进行合并,返回一个新数。这两个数相同比特位不同时就返回 1。

    位取反运算符:~

    对所有位的数字进行取反操作。即原来位是 0 则变为 1,原来位是 1 则变为 0。

    位左移运算符:<<

    将一个数左移一位,相当于把这个数翻倍。

    位右移运算符:>>

    一个数右移一位,相当于把这个数减半。

  4. 案例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    int a = 60;            /* 60 = 0011 1100 */
    int b = 13;            /* 13 = 0000 1101 */
          int c = 0;

    c = a & b; /* 12 = 0000 1100 */
    Console.WriteLine("Line 1 - c 的值是 {0}", c);

    c = a | b; /* 61 = 0011 1101 */
    Console.WriteLine("Line 2 - c 的值是 {0}", c);

    c = a ^ b; /* 49 = 0011 0001 */
    Console.WriteLine("Line 3 - c 的值是 {0}", c);

    c = ~a; /*-61 = 1100 0011 */
    Console.WriteLine("Line 4 - c 的值是 {0}", c);

    c = a << 2; /* 240 = 1111 0000 */
    Console.WriteLine("Line 5 - c 的值是 {0}", c);

    c = a >> 2; /* 15 = 0000 1111 */
    Console.WriteLine("Line 6 - c 的值是 {0}", c);
    Console.ReadLine();

    当前代码执行的最终结果为:

    1
    2
    3
    4
    5
    6
    Line 1 - c 的值是 12
    Line 2 - c 的值是 61
    Line 3 - c 的值是 49
    Line 4 - c 的值是 -61
    Line 5 - c 的值是 240
    Line 6 - c 的值是 15

本章总结

  1. 算术运算符有哪些?其中注意事项有哪些?
  2. 请列出关系运算符的全部符号?
  3. 逻辑运算符的三种符号分别是,每种符号需要注意的事项有哪些?
  4. 赋值运算符有哪些?
  5. 三元运算符的语法是什么?
  6. 位运算符

课后作业

1.已知圆周率pi为3.14,请输入圆的半径,然后计算圆的周长和面积。

2.请输入长方形的长和宽,然后计算其周长和面积。

3.请输入长方体的长、宽、高,然后计算其周长和体积。

4.已知圆周率pi为3.14,请输入圆的半径和圆柱体的高,然后计算其总面积和体积。

5.请输入某同学的姓名和年龄,然后输出其是否成年。

6.请输入张三同学的身高和体重,然后判断其BMI是否正常(BMI计算公式如下)。