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


C#的运算符和表达式

运算符大致分为3类:

  • 一元运算符,包括前缀运算符和后缀运算符,用于处理一个操作数
  • 二元运算符,使用时在操作数中间插入运算符,用于处理两个操作数
  • 三元运算符,使用时在操作数中间插入运算符,用于处理三个操作数
    在这里插入图片描述

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
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值