# C# 运算符

> 原文： [https://www.programiz.com/csharp-programming/operators](https://www.programiz.com/csharp-programming/operators)

#### 在本文中，我们将学习有关 C# 编程语言中不同类型的运算符以及如何使用它们的所有知识。

运算符是用于对操作数执行运算的符号。 操作数可以是变量和/或常量。

**例如，在`2+3`中的**中，`+`是用于执行加法运算的运算符，而`2`和`3`是操作数。

运算符用于在程序中操纵变量和值。 C# 支持许多运算符，这些运算符根据它们执行的操作类型进行分类。

* * *

## 1.基本赋值运算符

基本赋值运算符（`=`）用于为变量赋值。 例如，

```cs
double x;
x = 50.05;
```

在此，将 50.05 分配给`x`。

### 示例 1：基本分配运算符

```cs
using System;

namespace Operator
{
	class AssignmentOperator
	{
		public static void Main(string[] args)
		{
			int firstNumber, secondNumber;
			// Assigning a constant to variable
			firstNumber = 10;
			Console.WriteLine("First Number = {0}", firstNumber);

			// Assigning a variable to another variable
			secondNumber = firstNumber;
			Console.WriteLine("Second Number = {0}", secondNumber);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
First Number = 10
Second Number = 10
```

这是一个简单的示例，演示了赋值运算符的用法。

您可能已经注意到在示例中使用了大括号`{ }`。 我们将以*字符串格式化*讨论它们。 现在，请记住，`{0}`被字符串后面的第一个变量替换，`{1}`被第二个变量替换，依此类推。

* * *

## 2.算术运算符

算术运算符用于执行算术运算，例如加法，减法，乘法，除法等。

例如，

```cs
int x = 5;
int y = 10;
int z = x + y;// z = 15

```

C# 算术运算符

| 运算符 | 运算符名称 | 示例 |
| --- | --- | --- |
| `+` | 加法运算符 | `6 + 3`等于 9 |
| `-` | 减法运算符 | `10 - 6`等于 4 |
| `*` | 乘法运算符 | `4 * 2`等于 8 |
| `/` | 除法运算符 | `10 / 5`等于 2 |
| `%` | 模运算符（余数） | `16 % 3`等于 1 |

### 示例 2：算术运算符

```cs
using System;

namespace Operator
{
	class ArithmeticOperator
	{
		public static void Main(string[] args)
		{
			double firstNumber = 14.40, secondNumber = 4.60, result;
			int num1 = 26, num2 = 4, rem;

			// Addition operator
			result = firstNumber + secondNumber;
			Console.WriteLine("{0} + {1} = {2}", firstNumber, secondNumber, result);

			// Subtraction operator
			result = firstNumber - secondNumber;
			Console.WriteLine("{0} - {1} = {2}", firstNumber, secondNumber, result);

			// Multiplication operator
			result = firstNumber * secondNumber;
			Console.WriteLine("{0} * {1} = {2}", firstNumber, secondNumber, result);

			// Division operator
			result = firstNumber / secondNumber;
			Console.WriteLine("{0} / {1} = {2}", firstNumber, secondNumber, result);

			// Modulo operator
			rem = num1 % num2;
			Console.WriteLine("{0} % {1} = {2}", num1, num2, rem);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
14.4 + 4.6 = 19
14.4 - 4.6 = 9.8
14.4 * 4.6 = 66.24
14.4 / 4.6 = 3.1304347826087
26 % 4 = 2
```

在上面的示例中执行算术运算。 变量可以用语句中的常量替换。 例如，

```cs
result = 4.5 + 2.7 ; // result will hold 7.2
result = firstNumber - 3.2; // result will hold 11.2
```

* * *

## 3.关系运算符

关系运算符用于检查两个操作数之间的关系。 如果该关系为真，则结果为`true`，否则结果为`false`。

关系运算符用于决策和循环。

C# 关系运算符

| 运算符 | 运算符名称 | 示例 |
| --- | --- | --- |
| `==` | 等于 | `6 == 4`计算为`false` |
| `>` | 大于 | `3 > -1`计算为`true` |
| `<` | 小于 | `5 < 3`计算为`false` |
| `>=` | 大于或等于 | `4 >= 4`计算为`true` |
| `<=` | 小于或等于 | `5 <= 3`计算为`false` |
| `!=` | 不等于 | `10 != 2`计算为`true` |

### 示例 3：关系运算符

```cs
using System;

namespace Operator
{
	class RelationalOperator
	{
		public static void Main(string[] args)
		{
			bool result;
			int firstNumber = 10, secondNumber = 20;

			result = (firstNumber==secondNumber);
			Console.WriteLine("{0} == {1} returns {2}",firstNumber, secondNumber, result);

			result = (firstNumber > secondNumber);
			Console.WriteLine("{0} > {1} returns {2}",firstNumber, secondNumber, result);

			result = (firstNumber < secondNumber);
			Console.WriteLine("{0} < {1} returns {2}",firstNumber, secondNumber, result);

			result = (firstNumber >= secondNumber);
			Console.WriteLine("{0} >= {1} returns {2}",firstNumber, secondNumber, result);

			result = (firstNumber <= secondNumber);
			Console.WriteLine("{0} <= {1} returns {2}",firstNumber, secondNumber, result);

			result = (firstNumber != secondNumber);
			Console.WriteLine("{0} != {1} returns {2}",firstNumber, secondNumber, result);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
10 == 20 returns False
10 > 20 returns False
10 < 20 returns True
10 >= 20 returns False
10 <= 20 returns True
10 != 20 returns True
```

* * *

## 4.逻辑运算符

逻辑运算符用于执行诸如`and`，`or`之类的逻辑运算。 逻辑运算符对布尔表达式（`true`和`false`）进行操作，并返回布尔值。 逻辑运算符用于决策和循环。

这是如何为逻辑`AND`和`OR`运算符求值结果的方法。

C# 逻辑运算符

| 操作数 1 | 操作数 2 | 或（<code>&#124;&#124;</code>） | 且（`&&`） |
| --- | --- | --- | --- |
| `true` | `true` | `true` | `true` |
| `true` | `false` | `true` | `false` |
| `false` | `true` | `true` | `false` |
| `false` | `false` | `false` | `false` |

简单来说，该表可以总结为：

*   如果操作数之一为`true`，则`OR`运算符会将其求值为`true`。
*   如果操作数之一为`false`，则`AND`运算符会将其求值为`false`。

### 示例 4：逻辑运算符

```cs
using System;

namespace Operator
{
	class LogicalOperator
	{
		public static void Main(string[] args)
		{
			bool result;
			int firstNumber = 10, secondNumber = 20;

			// OR operator
			result = (firstNumber == secondNumber) || (firstNumber > 5);
			Console.WriteLine(result);

			// AND operator
			result = (firstNumber == secondNumber) && (firstNumber > 5);
			Console.WriteLine(result);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
True
False
```

* * *

## 5.一元运算符

与其他运算符不同，一元运算符对单个操作数进行运算。

C# 一元运算符

| 运算符 | 运算符名称 | 描述 |
| --- | --- | --- |
| `+` | 一元加 | 保留操作数的原样 |
| `-` | 一元减 | 反转操作数的符号 |
| `++` | 递增 | 值增加 1 |
| `--` | 递减 | 递减值 1 |
| `!` | 逻辑否定（非） | 反转布尔值 |

### 示例 5：一元运算符

```cs
using System;

namespace Operator
{
	class UnaryOperator
	{
		public static void Main(string[] args)
		{
			int number = 10, result;
			bool flag = true;

			result = +number;
			Console.WriteLine("+number = " + result);

			result = -number;
			Console.WriteLine("-number = " + result);

			result = ++number;
			Console.WriteLine("++number = " + result);

			result = --number;
			Console.WriteLine("--number = " + result);

			Console.WriteLine("!flag = " + (!flag));
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
+number = 10
-number = -10
++number = 11
--number = 10
!flag = False
```

递增`(++)`和递减`(--)`运算符可用作前缀和后缀。 如果用作前缀，则变量的值更改将在同一行上显示；如果用作后缀，则变量的值更改将在下一行上显示。 通过下面的示例将很清楚。

### 示例 6：C# 中的后置和前置递增运算符

```cs
using System;

namespace Operator
{
	class UnaryOperator
	{
		public static void Main(string[] args)
		{
			int number = 10;

			Console.WriteLine((number++));
			Console.WriteLine((number));

			Console.WriteLine((++number));
			Console.WriteLine((number));
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
10
11
12
12
```

我们可以看到使用`++`作为前缀和后缀的效果。 当在操作数之后使用`++`时，首先求值该值，然后将其增加`1`。 因此，声明

```cs
Console.WriteLine((number++));
```

打印`10`而不是`11`。 值打印后，数字值增加`1`。

当`++`用作前缀时，该过程相反。 该值在打印前增加。 因此，声明

```cs
Console.WriteLine((++number));
```

打印`12`。

减量运算符`(--)`的情况相同。

* * *

## 6.三元运算符

三元运算符`? :`对三个操作数进行运算。 它是`if-then-else`语句的简写。 三元运算符可以按如下方式使用：

```cs
variable = Condition? Expression1 : Expression2;
```

三元运算符的工作方式如下：

*   如果条件表示的表达式为`true`，则将`Expression1`的结果分配给变量。
*   如果为`false`，则将`Expression2`的结果分配给变量。

### 示例 7：三元运算符

```cs
using System;

namespace Operator
{
	class TernaryOperator
	{
		public static void Main(string[] args)
		{
			int number = 10;
			string result;

			result = (number % 2 == 0)? "Even Number" : "Odd Number";
			Console.WriteLine("{0} is {1}", number, result);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
10 is Even Number
```

要了解更多信息，请访问 *C# 三元运算符*。

* * *

## 7.按位和移位运算符

按位和移位运算符用于执行位操作。

C# 按位和移位操作

| 运算符 | 运算符名称 |
| --- | --- |
| `~` | 按位补码 |
| `&` | 按位与 |
| <code>&#124;</code> | 按位或 |
| `^` | 按位异或 |
| `<<` | 按位左移 |
| `>>` | 按位右移 |

### 例 8：按位和移位操作

```cs
using System;

namespace Operator
{
	class BitOperator
	{
		public static void Main(string[] args)
		{
			int firstNumber = 10;
			int secondNumber = 20;
			int result;

			result = ~firstNumber;
			Console.WriteLine("~{0} = {1}", firstNumber, result);

			result = firstNumber & secondNumber;
			Console.WriteLine("{0} & {1} = {2}", firstNumber,secondNumber, result);

			result = firstNumber | secondNumber;
			Console.WriteLine("{0} | {1} = {2}", firstNumber,secondNumber, result);

			result = firstNumber ^ secondNumber;
			Console.WriteLine("{0} ^ {1} = {2}", firstNumber,secondNumber, result);

			result = firstNumber << 2;
			Console.WriteLine("{0} << 2 = {1}", firstNumber, result);

			result = firstNumber >> 2;
			Console.WriteLine("{0} >> 2 = {1}", firstNumber, result);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
~10 = -11
10 & 20 = 0
10 | 20 = 30
10 ^ 20 = 30
10 << 2 = 40
10 >> 2 = 2
```

要了解更多信息，请访问 *C# 按位和位移位运算符*。

* * *

## 8.复合赋值运算符

C# 复合赋值运算符

| 运算符 | 运算符名称 | 示例 | 相当于 |
| --- | --- | --- | --- |
| `+=` | 加法赋值 | `x += 5` | `x = x + 5` |
| `-=` | 减法赋值 | `x -= 5` | `x = x - 5` |
| `*=` | 乘法赋值 | `x *= 5` | `x = x * 5` |
| `/=` | 除法赋值 | `x /= 5` | `x = x / 5` |
| `%=` | 模赋值 | `x %= 5` | `x = x % 5` |
| `&=` | 按位与赋值 | `x &= 5` | `x = x & 5` |
| <code>&#124;=</code> | 按位或赋值 | `x &#124;= 5` | `x = x &#124; 5` |
| `^=` | 按位异或赋值 | `x ^= 5` | `x = x ^ 5` |
| `<<=` | 左移赋值 | `x <<= 5` | `x = x << 5` |
| `>>=` | 右移赋值 | `x >>= 5` | `x = x >> 5` |
| `=>` | Lambda 运算符 | `x => x*x` | `Returns x*x` |

### 示例 9：复合赋值运算符

```cs
using System;

namespace Operator
{
	class BitOperator
	{
		public static void Main(string[] args)
		{
			int number = 10;

			number += 5;
			Console.WriteLine(number);

			number -= 3;
			Console.WriteLine(number);

			number *= 2;
			Console.WriteLine(number);

			number /= 3;
			Console.WriteLine(number);

			number %= 3;
			Console.WriteLine(number);

			number &= 10;
			Console.WriteLine(number);

			number |= 14;
			Console.WriteLine(number);

			number ^= 12;
			Console.WriteLine(number);

			number <<= 2;
			Console.WriteLine(number);

			number >>= 3;
			Console.WriteLine(number);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
15
12
24
8
2
2
14
2
8
1
```

我们将在后面的教程中讨论 *Lambda 运算符*。