C# - 运算符
C# - 运算符
Section titled “C# - 运算符”运算符是指导编译器执行特定数学、逻辑或其他操作的符号。C# 提供了丰富的内置运算符,可分为以下几类:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符和移位运算符
- 赋值运算符
- 其他运算符(类型测试、空值合并等)
这些运算符执行标准数学计算。假设 int a = 10; 且 int b = 3;。
| 运算符 | 描述 | 示例 |
|---|---|---|
+ | 加法 | a + b 为 13 |
- | 减法 | a - b 为 7 |
* | 乘法 | a * b 为 30 |
/ | 除法 | a / b 为 3 (整数除法截断余数) |
% | 模(余数) | a % b 为 1 |
++ | 递增 1 | a++ 先使用 a 的值,然后将其递增到 11 |
-- | 递减 1 | a-- 先使用 a 的值,然后将其递减到 9 |
// 示例int x = 10, y = 4;Console.WriteLine($"Addition: {x + y}"); // 输出: 14Console.WriteLine($"Division: {x / y}"); // 输出: 2Console.WriteLine($"Modulus: {x % y}"); // 输出: 2
// 对于浮点除法,将其中一个操作数转换为 float/double 类型Console.WriteLine($"Floating-point Division: {(double)x / y}"); // 输出: 2.5这些运算符比较两个操作数并返回一个 bool 值(true 或 false)。假设 int a = 10; 且 int b = 20;。
| 运算符 | 描述 | 示例 |
|---|---|---|
== | 等于 | a == b 为 false |
!= | 不等于 | a != b 为 true |
> | 大于 | a > b 为 false |
< | 小于 | a < b 为 true |
>= | 大于或等于 | a >= b 为 false |
<= | 小于或等于 | a <= b 为 true |
// 示例int a = 20, b = 15;Console.WriteLine($"Is a > b? {a > b}"); // 输出: TrueConsole.WriteLine($"Is a == b? {a == b}"); // 输出: False这些运算符用于组合 bool 表达式。它们是创建 if 语句和循环中复杂条件的基础。
| 运算符 | 描述 | 示例 (A 为 true, B 为 false) |
|---|---|---|
&& | 逻辑与(短路) | A && B 为 false |
|| | 逻辑或(短路) | A || B 为 true |
! | 逻辑非(取反) | !A 为 false |
// 示例bool hasKey = true;int coins = 50;
bool canOpenChest = hasKey && coins >= 100;Console.WriteLine($"Can open chest? {canOpenChest}"); // 输出: False这些运算符将值赋给变量。复合赋值运算符提供了一种简写形式,可以在一步中完成操作和赋值。
| 运算符 | 示例 | 等效于 |
|---|---|---|
= | x = 5; | 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); (仅当 x 为 null 时赋值) |
// 示例int score = 100;score += 50; // 增加 50 分Console.WriteLine($"Final Score: {score}"); // 输出: 150
string name = null;name ??= "Guest"; // 赋值 "Guest",因为 name 为 nullConsole.WriteLine($"User: {name}"); // 输出: GuestC# 还包括其他一些用于各种任务的强大运算符。
| 运算符 | 名称 | 描述 |
|---|---|---|
?: | 三元条件运算符 | 一个 if-else 语句的简写形式。condition ? val_if_true : val_if_false。 |
?? | 空值合并运算符 | 如果左侧操作数不为 null,则返回左侧操作数;否则,返回右侧操作数。 |
?. | 空值条件运算符 (Elvis) | 安全地访问成员。如果操作数为 null,则表达式评估为 null 而不是抛出异常。 |
typeof() | 类型 | 返回某个类型的 System.Type 对象。 |
sizeof() | 大小 | 返回值类型的大小(以字节为单位)。非基元类型需要 unsafe 上下文。 |
nameof() | 名称 | 将变量、类型或成员的名称作为字符串字面量返回。 |
is | 类型检查 | 检查对象是否为特定类型,返回 true 或 false。 |
as | 类型转换 | 将对象转换为特定类型而不抛出异常;如果转换失败则返回 null。 |
// 三元运算符和空值合并运算符示例int age = 21;string status = (age >= 18) ? "Adult" : "Minor";Console.WriteLine($"Status: {status}"); // 输出: Adult
string displayName = null;string username = displayName ?? "User123";Console.WriteLine($"Username: {username}"); // 输出: User123
// 空值条件运算符示例string[] names = { "Alice", "Bob" };//string[] names = null;int? count = names?.Length; // count 是 int?(可空 int)Console.WriteLine($"Number of names: {count ?? 0}"); // 安全地获取长度,如果为 null 则默认为 0运算符优先级
Section titled “运算符优先级”运算符优先级决定了复杂表达式中的求值顺序。例如,* 的优先级高于 +。
尽管了解规则很有用,但最佳实践是使用括号 () 来明确你的意图。这可以提高代码可读性并防止细微的错误。
// 不清晰:依赖读者了解优先级int result1 = 3 + 4 * 5; // 23
// 清晰:顺序明确且具有自解释性int result2 = 3 + (4 * 5); // 23
Console.WriteLine($"Result 1: {result1}, Result 2: {result2}");有关所有运算符及其优先级级别的详细分解,请参阅我们专门的C# 运算符优先级教程。