3.4 C#的运算符和表达式详解(运算符优先级、算术运算符、逻辑运算符……)

文章目录

  • C#的运算符和表达式
    • 3.4.1运算符与表达式类型
      • 1. 算术运算符与算术表达式
      • 2. 字符串运算符与字符串表达式
      • 3. 关系运算符与关系表达式
      • 4. 逻辑运算符与逻辑表达式
      • 5. 条件运算符与条件表达式
      • 6. 赋值运算符与赋值表达式
    • 3.4.2 运算符的优先级与结合性
      • 1. 运算符的优先级
      • 2. 结合性
      • 示例代码


C#的运算符和表达式

运算符大致分为3类:

  • 一元运算符,包括前缀运算符和后缀运算符,用于处理一个操作数
  • 二元运算符,使用时在操作数中间插入运算符,用于处理两个操作数
  • 三元运算符,使用时在操作数中间插入运算符,用于处理三个操作数
    3.4 C#的运算符和表达式详解(运算符优先级、算术运算符、逻辑运算符……)_第1张图片

3.4.1运算符与表达式类型

当然,以下是C#中各种运算符和表达式的表格表达,以及简单的代码说明。

1. 算术运算符与算术表达式

运算符 描述 代码示例 结果
+ 相加 int result = a + b; a + b的值
- 相减 int result = a - b; a - b的值
* 相乘 int result = a * b; a * b的值
/ 相除 double result = a / (double)b; a / b的值
% 求余 int result = a % b; a % b的值
++ 自增(使变量增加1) int a = 5; a++; a变为6
-- 自减(使变量减少1) int a = 5; a--; a变为4

2. 字符串运算符与字符串表达式

运算符 描述 代码示例 结果
+ 连接字符串 string result = a + b; ab连接后的字符串
== 检查相等 bool result = a == b; 如果a等于b,结果为true
!= 检查不等 bool result = a != b; 如果a不等于b,结果为true

3. 关系运算符与关系表达式

运算符 描述 代码示例 结果
== 检查相等 bool result = a == b; 如果a等于b,结果为true
!= 检查不等 bool result = a != b; 如果a不等于b,结果为true
> 检查大于 bool result = a > b; 如果a大于b,结果为true
< 检查小于 bool result = a < b; 如果a小于b,结果为true
>= 检查大于等于 bool result = a >= b; 如果a大于或等于b,结果为true
<= 检查小于等于 bool result = a <= b; 如果a小于或等于b,结果为true

4. 逻辑运算符与逻辑表达式

运算符 描述 代码示例 结果
&& 逻辑与 bool result = a && b; 如果ab都为true,结果为true
` ` 逻辑或
! 逻辑非 bool result = !a; 如果afalse,结果为true

5. 条件运算符与条件表达式

运算符 描述 代码示例 结果
?: 条件表达式 string result = condition ? "valueIfTrue" : "valueIfFalse"; 如果conditiontrue,结果是"valueIfTrue",否则是"valueIfFalse"

6. 赋值运算符与赋值表达式

运算符 描述 代码示例 结果
= 赋值 a = b; b的值赋给a
+= 加赋值 a += b; ab相加的结果赋给a
-= 减赋值 a -= b; a减去b的结果赋给a
*= 乘赋值 a *= b; a乘以b的结果赋给a
/= 除赋值 a /= b; a除以b的结果赋给a

在这些表格中,我们展示了各种运算符和表达式的符号、描述、代码示例以及预期的结果。这些运算符和表达式是C#编程中的基本构建块,用于执行各种计算和条件判断。

3.4.2 运算符的优先级与结合性

在C#中,运算符的优先级决定了在表达式中多个运算符被求值的顺序。结合性(也称为运算符的关联性)则决定了当表达式中包含同一优先级的运算符时,运算是如何进行的。

1. 运算符的优先级

运算符优先级是从高到低排列的,优先级高的运算符会先被求值。以下是C#中运算符的优先级顺序,从最高到最低:

  1. 括号 () [] {}(用于改变运算顺序)
  2. 后置递增和递减 x++ x--(后置)
  3. 一元运算符 ++ -- + - ! ~(前置)
  4. 静态成员访问 a.b
  5. 乘法和除法 * / %
  6. 加法和减法 + -
  7. 位移运算符 << >>
  8. 关系运算符 < <= > >= is as
  9. 等于和不等于 == !=
  10. 逻辑 AND &
  11. 逻辑 XOR ^
  12. 逻辑 OR |
  13. 条件 AND &&
  14. 条件 OR ||
  15. 条件运算符 ?:
  16. 赋值运算符 = += -= *= /= %= <<= >>= &= ^= |=
  17. 后置递增和递减 x++ x--(前置)

2. 结合性

结合性决定了具有相同优先级的运算符在表达式中的求值顺序。C#中的结合性规则如下:

  • 左结合性:表达式中的运算符从左到右求值。例如,算术运算符(+ - * /)和关系运算符(< > <= >=)都是左结合性。
  • 右结合性:表达式中的运算符从右到左求值。例如,赋值运算符(= += -=)和条件运算符(?:)是右结合性。
  • 无结合性:括号 () 没有结合性,它们总是首先被求值。

示例代码

以下是展示运算符优先级和结合性的示例代码:

using System;

class Program
{
    static void Main()
    {
        int a = 10;
        int b = 5;
        int c = 3;

        // 演示优先级:乘法优先于加法
        int result1 = a + b * c; // 先计算 b * c
        Console.WriteLine(result1); // 输出 25

        // 演示结合性:左结合性
        int result2 = a + (b * c) + (b + c); // 先计算最左边的括号内的表达式
        Console.WriteLine(result2); // 输出 25

        // 演示结合性:右结合性(赋值运算符)
        int value = 1;
        value += a = b + c; // 先计算最右边的赋值
        Console.WriteLine(value); // 输出 9
        Console.WriteLine(a); // 输出 8

        // 演示优先级:条件运算符
        string result3 = (a > b) ? "a is greater" : "b is greater or equal";
        Console.WriteLine(result3); // 输出 "b is greater or equal"

        // 演示优先级:括号改变优先级
        int result4 = (a + b) * c; // 先计算括号内的加法
        Console.WriteLine(result4); // 输出 80
    }
}

在这个示例中,展示了不同运算符的优先级和结合性如何影响表达式的求值结果。理解运算符的优先级和结合性对于编写正确的表达式非常重要。

你可能感兴趣的:(从零开始学c,c#,java,android,运算符,表达式)