C# 运算符详解:类型、实例及优先级

C# 是一种功能强大的面向对象编程语言,提供了丰富的内置运算符,以帮助开发者执行数学、逻辑、位操作等各种任务。本文将详细介绍 C# 中常见的运算符,涵盖算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符以及其他特殊运算符,并且会通过实例来帮助您深入理解这些运算符的使用方式和优先级。

1. 算术运算符

算术运算符用于执行数学计算,C# 中的算术运算符包括加、减、乘、除、取余、自增和自减等。

运算符列表

运算符 描述 示例
+ 两个操作数相加 A + B
- 从第一个操作数中减去第二个操作数 A - B
* 两个操作数相乘 A * B
/ 除法,返回商 A / B
% 取余,返回余数 A % B
++ 自增,操作数加 1 A++++A
-- 自减,操作数减 1 A----A

实例

csharp 复制代码
using System;

namespace OperatorsAppl
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 21;
            int b = 10;
            int c;

            c = a + b;
            Console.WriteLine("Line 1 - c 的值是 {0}", c);  // 31
            c = a - b;
            Console.WriteLine("Line 2 - c 的值是 {0}", c);  // 11
            c = a * b;
            Console.WriteLine("Line 3 - c 的值是 {0}", c);  // 210
            c = a / b;
            Console.WriteLine("Line 4 - c 的值是 {0}", c);  // 2
            c = a % b;
            Console.WriteLine("Line 5 - c 的值是 {0}", c);  // 1

            // 自增运算符示例
            c = ++a;  
            Console.WriteLine("Line 6 - c 的值是 {0}", c);  // 22

            // 自减运算符示例
            c = --a;
            Console.WriteLine("Line 7 - c 的值是 {0}", c);  // 21
        }
    }
}

输出结果:

复制代码
Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 22
Line 7 - c 的值是 21

2. 关系运算符

关系运算符用于比较两个操作数的关系,通常用于条件判断。

运算符列表

运算符 描述 示例
== 判断两个操作数是否相等 (A == B)
!= 判断两个操作数是否不相等 (A != B)
> 判断左操作数是否大于右操作数 (A > B)
< 判断左操作数是否小于右操作数 (A < B)
>= 判断左操作数是否大于或等于右操作数 (A >= B)
<= 判断左操作数是否小于或等于右操作数 (A <= B)

实例

csharp 复制代码
using System;

class Program
{
    static void Main(string[] args)
    {
        int a = 21;
        int b = 10;

        if (a == b)
        {
            Console.WriteLine("Line 1 - a 等于 b");
        }
        else
        {
            Console.WriteLine("Line 1 - a 不等于 b");
        }
        if (a < b)
        {
            Console.WriteLine("Line 2 - a 小于 b");
        }
        else
        {
            Console.WriteLine("Line 2 - a 不小于 b");
        }
        if (a > b)
        {
            Console.WriteLine("Line 3 - a 大于 b");
        }
        else
        {
            Console.WriteLine("Line 3 - a 不大于 b");
        }

        // 改变 a 和 b 的值
        a = 5;
        b = 20;

        if (a <= b)
        {
            Console.WriteLine("Line 4 - a 小于或等于 b");
        }
        if (b >= a)
        {
            Console.WriteLine("Line 5 - b 大于或等于 a");
        }
    }
}

输出结果:

复制代码
Line 1 - a 不等于 b
Line 2 - a 不小于 b
Line 3 - a 大于 b
Line 4 - a 小于或等于 b
Line 5 - b 大于或等于 a

3. 逻辑运算符

逻辑运算符用于连接多个条件表达式,返回布尔值结果。

运算符列表

运算符 描述 示例
&& 逻辑与运算符,当两个操作数都为 true 时结果为 true (A && B)
` ` 逻辑或运算符,当任一操作数为 true 时结果为 true `(A B)`
! 逻辑非运算符,将操作数的布尔值取反 !(A && B)

实例

csharp 复制代码
using System;

namespace OperatorsAppl
{
    class Program
    {
        static void Main(string[] args)
        {
            bool a = true;
            bool b = true;

            if (a && b)
            {
                Console.WriteLine("Line 1 - 条件为真");
            }
            if (a || b)
            {
                Console.WriteLine("Line 2 - 条件为真");
            }

            a = false;
            b = true;

            if (a && b)
            {
                Console.WriteLine("Line 3 - 条件为真");
            }
            else
            {
                Console.WriteLine("Line 3 - 条件不为真");
            }
            if (!(a && b))
            {
                Console.WriteLine("Line 4 - 条件为真");
            }
        }
    }
}

输出结果:

复制代码
Line 1 - 条件为真
Line 2 - 条件为真
Line 3 - 条件不为真
Line 4 - 条件为真

4. 位运算符

位运算符按位对整数进行操作,通常用于处理二进制数据。

运算符列表

运算符 描述 示例
& 位与运算符 A & B
` ` 位或运算符 `A B`
^ 位异或运算符 A ^ B
~ 位取反运算符 ~A
<< 左移运算符 A << 2
>> 右移运算符 A >> 2

实例

csharp 复制代码
using System;

namespace OperatorsAppl
{
    class Program
    {
        static void Main(string[] args)
        {
            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);

}

}

}

复制代码
### 输出结果:

Line 1 - c 的值是 12

Line 2 - c 的值是 61

Line 3 - c 的值是 49

Line 4 - c 的值是 -61

Line 5 - c 的值是 240

Line 6 - c 的值是 15

复制代码
## 5. 赋值运算符

赋值运算符用于将右边的值赋给左边的变量。

### 运算符列表

| 运算符 | 描述 | 示例 |
| ------ | ---- | ---- |
| `=` | 赋值运算符 | `C = A + B` |
| `+=` | 加赋值运算符 | `C += A` 相当于 `C = C + A` |
| `-=` | 减赋值运算符 | `C -= A` 相当于 `C = C - A` |
| `*=` | 乘赋值运算符 | `C *= A` 相当于 `C = C * A` |
| `/=` | 除赋值运算符 | `C /= A` 相当于 `C = C / A` |
| `%=` | 取余赋值运算符 | `C %= A` 相当于 `C = C % A` |

### 实例

```csharp
using System;

namespace OperatorsAppl
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 21;
            int c;

            c = a;
            Console.WriteLine("Line 1 - =  c 的值 = {0}", c);

            c += a;
            Console.WriteLine("Line 2 - += c 的值 = {0}", c);

            c -= a;
            Console.WriteLine("Line 3 - -=  c 的值 = {0}", c);

            c *= a;
            Console.WriteLine("Line 4 - *=  c 的值 = {0}", c);

            c /= a;
            Console.WriteLine("Line 5 - /=  c 的值 = {0}", c);

            c = 200;
            c %= a;
            Console.WriteLine("Line 6 - %=  c 的值 = {0}", c);

            c <<= 2;
            Console.WriteLine("Line 7 - <<=  c 的值 = {0}", c);

            c >>= 2;
            Console.WriteLine("Line 8 - >>=  c 的值 = {0}", c);

            c &= 2;
            Console.WriteLine("Line 9 - &=  c 的值 = {0}", c);

            c ^= 2;
            Console.WriteLine("Line 10 - ^=  c 的值 = {0}", c);

            c |= 2;
            Console.WriteLine("Line 11 - |=  c 的值 = {0}", c);
        }
    }
}

输出结果:

复制代码
Line 1 - =     c 的值 = 21
Line 2 - +=    c 的值 = 42
Line 3 - -=    c 的值 = 21
Line 4 - *=    c 的值 = 441
Line 5 - /=    c 的值 = 21
Line 6 - %=    c 的值 = 11
Line 7 - <<=    c 的值 = 44
Line 8 - >>=    c 的值 = 11
Line 9 - &=    c 的值 = 2
Line 10 - ^=    c 的值 = 0
Line 11 - |=    c 的值 = 2

6. 其他运算符

C# 中还有一些特殊的运算符,包括条件运算符、sizeoftypeof 等。

重要运算符

运算符 描述 示例
sizeof() 返回数据类型的大小 sizeof(int)
typeof() 获取类型对象 typeof(int)
? : 三元条件运算符 a > b ? "A大于B" : "A不大于B"

实例

csharp 复制代码
using System;

namespace OperatorsAppl
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("int 的大小是 {0}", sizeof(int));
            Console.WriteLine("short 的大小是 {0}", sizeof(short));

            int a = 10;
            int b = (a == 1) ? 20 : 30;
            Console.WriteLine("b 的值是 {0}", b);

            b = (a == 10) ? 20 : 30;
            Console.WriteLine("b 的值是 {0}", b);
        }
    }
}

输出结果:

复制代码
int 的大小是 4
short 的大小是 2
b 的值是 30
b 的值是 20

7. 运算符优先级

在 C# 中,运算符的优先级决定了表达式中运算的顺序。高优先级的运算符会先执行。在实际编程中,合理使用括号来改变运算顺序有助于提高代码的可读性和准确性。

优先级简要概括:

  • 括号优先:最先计算。
  • 乘除:先于加减运算符。
  • 加减:比移位运算符低。
  • 位移运算:在关系运算符之前。
  • 关系运算符:在逻辑运算符之前。

例如:

csharp 复制代码
int a = 10, b = 5, c = 2;
int result = a + b * c;  // 先计算乘法,再计算加法
Console.WriteLine(result);  // 输出20

通过运算符的优先级控制,开发者可以确保程序按预期执行。

相关推荐
C#程序员一枚3 小时前
Web Service 和 Web API
c#
MaoziShan19 小时前
CMU Subword Modeling | 09 Lexemes, or What Dictionaries Know about Morphology
开发语言·人工智能·机器学习·语言模型·自然语言处理·c#
游乐码20 小时前
c#选择排序
c#·排序算法
listhi52021 小时前
基于C#实现动态人脸检测
开发语言·c#
rabbitlzx1 天前
《Async in C# 5.0》第十四章 深入探讨编译器对于async的转换
java·开发语言·c#·异步·asynchronous
智商偏低1 天前
unity 如何渲染大场景
c#
光泽雨1 天前
单例模式代码理解
开发语言·c#
软泡芙1 天前
【C#】一个原始的标准蓝牙心率血氧服务的数据:字节数组byte[]有5个数据分别的0、0、240、0、240,转成IEEE 11073 SFLOAT
c#