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# 中还有一些特殊的运算符,包括条件运算符、sizeof 和 typeof 等。
重要运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
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
通过运算符的优先级控制,开发者可以确保程序按预期执行。