C# 运算符(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在编程世界中,运算符就像是连接代码逻辑的“桥梁”,它们帮助开发者高效地完成数值计算、条件判断、逻辑推理等核心操作。对于 C# 开发者而言,熟练掌握 C# 运算符 的使用规则和应用场景,不仅能提升代码的简洁性,还能显著优化程序的执行效率。无论是初学者还是有一定经验的开发者,深入理解运算符的特性,都是迈向代码优化与工程化的重要一步。本文将从基础概念出发,结合实例和进阶技巧,系统解析 C# 中各类运算符的用法与原理。


一、运算符的基础概念与分类

1.1 什么是运算符?

运算符是编程语言中用于执行特定操作的符号或关键字。它们可以操作一个或多个操作数(如变量、常量、表达式),并返回一个结果。例如,+ 是一个二元运算符,用于将两个数相加;++ 是一个一元运算符,用于将变量的值增加 1。

1.2 C# 运算符的分类

C# 支持多种类型的运算符,按功能可分为以下几类:

  • 算术运算符:执行基本的数学运算(如加减乘除)。
  • 赋值运算符:将值或表达式的结果赋给变量。
  • 比较运算符:比较两个值的大小或相等性。
  • 逻辑运算符:用于构建复合条件逻辑。
  • 位运算符:对二进制位进行操作。
  • 其他运算符:包括条件运算符、类型转换运算符等。

二、算术运算符:数学计算的基石

2.1 基本算术运算符

C# 提供了常见的算术运算符,适用于数值类型(如 intfloatdouble)。

运算符描述示例
+加法5 + 3 → 8
-减法10 - 4 → 6
*乘法2 * 7 → 14
/除法9 / 3 → 3
%取余(模)10 % 3 → 1

示例代码:

int a = 10, b = 3;  
Console.WriteLine(a + b);  // 输出 13  
Console.WriteLine(a % b);  // 输出 1  

2.2 复合赋值运算符

复合赋值运算符将算术操作与赋值结合,简化代码。例如 a += b 等价于 a = a + b

运算符等价表达式
+=a = a + b
-=a = a - b
*=a = a * b
/=a = a / b
%=a = a % b

示例代码:

int x = 5;  
x += 3;  // 等价于 x = x + 3 → x 变为 8  
x %= 2;  // 等价于 x = x % 2 → x 变为 0  

三、赋值运算符与类型转换

3.1 简单赋值运算符 =

= 是最基础的赋值运算符,将右边的表达式结果赋给左边的变量。

int num = 10;  // 将 10 赋给 num  
string message = "Hello C#";  

3.2 类型转换运算符

C# 支持显式和隐式类型转换,通过 asis 和强制类型转换符(如 (int))实现。

显式类型转换示例:

double d = 3.14;  
int i = (int)d;  // 强制转换为整数 → i = 3  

is 运算符:检查类型兼容性

object obj = "Hello";  
if (obj is string) {  
    Console.WriteLine("该对象是字符串类型");  
}

四、比较运算符与逻辑运算符

4.1 比较运算符

比较运算符用于判断两个值的大小或相等性,返回 bool 类型结果。

运算符描述示例
==等于5 == 5 → true
!=不等于3 != 4 → true
>大于10 > 5 → true
<小于2 < 1 → false
>=大于或等于7 >= 7 → true
<=小于或等于4 <= 3 → false

示例代码:

int x = 5, y = 5;  
bool isEqual = (x == y);  // true  
bool isLess = (x < 10);   // true  

4.2 逻辑运算符

逻辑运算符用于组合多个条件表达式,返回布尔值。

运算符描述示例
&&逻辑与(短路)(x > 0) && (y < 5)
||逻辑或(短路)(a == 0) || (b != 0)
!逻辑非!isValid → 取反

短路逻辑运算符的特性:

  • &&:若左边为 false,右边表达式不执行。
  • ||:若左边为 true,右边表达式不执行。

示例代码:

bool result = (x > 0) && (y != 0);  // 仅当两个条件都为 true 时返回 true  

五、位运算符:底层操作的利器

5.1 位运算符的作用

位运算符直接操作二进制位,常用于优化性能或处理硬件级操作(如掩码、标志位)。

运算符描述示例
&按位与5 & 3 → 1(二进制 101 & 011 = 001)
|按位或5 | 3 → 7(二进制 111)
^按位异或5 ^ 3 → 6(二进制 110)
~按位取反~5 → -6(二进制补码)
<<左移3 << 1 → 6(二进制左移一位)
>>右移8 >> 1 → 4(二进制右移一位)

示例代码:

int a = 0b1100;  // 十进制 12  
int b = 0b1010;  // 十进制 10  
Console.WriteLine(a & b);  // 输出 8(二进制 1000)  

5.2 实际应用:标志位的管理

位运算符常用于定义标志位,例如:

const int FLAG_A = 0b0001;  
const int FLAG_B = 0b0010;  
const int FLAG_C = 0b0100;  

int flags = FLAG_A | FLAG_C;  // 启用 A 和 C 标志  
if ((flags & FLAG_B) != 0) {  
    // 检查 FLAG_B 是否被启用  
}  

六、特殊运算符与进阶用法

6.1 条件运算符 ?:

条件运算符是 C# 中唯一的三元运算符,语法为 条件 ? 表达式1 : 表达式2

int max = (a > b) ? a : b;  // 简洁地比较 a 和 b  

6.2 自增/自减运算符 ++--

这两个运算符可前置或后置使用,但行为不同:

int x = 5;  
int y = ++x;  // 先自增,y = 6,x = 6  
int z = x--;  // 先取值,z = 6,后 x = 5  

6.3 运算符优先级与结合性

运算符优先级决定了表达式中运算的执行顺序。例如,* 的优先级高于 +,因此 3 + 4 * 2 的结果是 11。若需改变顺序,可使用括号。

运算符优先级表(部分):

优先级运算符结合性
1()[].左至右
2++--!~右至左
3*/%左至右
4+-左至右
5<<>>左至右
6<=>=<>左至右
7==!=左至右

示例:优先级的影响

int result = 5 + 3 * 2;  // 5 + (3*2) = 11  
int result2 = (5 + 3) * 2;  // 8 * 2 = 16  

七、实际案例:运算符的综合应用

7.1 实现一个简单计算器

结合算术、比较和逻辑运算符,构建一个控制台计算器:

Console.WriteLine("请输入第一个数字:");  
int num1 = int.Parse(Console.ReadLine());  
Console.WriteLine("请输入运算符 (+, -, *, /):");  
string op = Console.ReadLine();  
Console.WriteLine("请输入第二个数字:");  
int num2 = int.Parse(Console.ReadLine());  

int result;  
if (op == "+")  
    result = num1 + num2;  
else if (op == "-")  
    result = num1 - num2;  
else if (op == "*")  
    result = num1 * num2;  
else if (op == "/") {  
    if (num2 == 0) {  
        Console.WriteLine("除数不能为零!");  
        return;  
    }  
    result = num1 / num2;  
} else {  
    Console.WriteLine("无效的运算符");  
    return;  
}  
Console.WriteLine($"结果:{result}");  

7.2 位运算符在状态管理中的应用

假设需要管理用户权限(如读、写、执行),可通过位掩码实现:

const int READ = 0b001;  
const int WRITE = 0b010;  
const int EXECUTE = 0b100;  

int userPermissions = READ | WRITE;  // 用户有读写权限  
if ((userPermissions & EXECUTE) != 0) {  
    // 检查是否具备执行权限  
}  

八、结论

C# 运算符是构建高效、简洁代码的核心工具。从基础的算术运算到复杂的位操作,每种运算符都有其独特的作用场景。掌握运算符的优先级、结合性以及实际应用技巧,不仅能提升编码效率,还能减少因逻辑错误导致的程序缺陷。对于开发者而言,建议通过实际项目不断练习运算符的组合使用,同时关注运算符重载等高级特性(如在自定义类型中扩展运算符功能),进一步深化对语言特性的理解。

通过本文的学习,读者应能系统掌握 C# 运算符 的分类、用法及常见陷阱,为后续开发打下坚实基础。

最新发布