C#运算符详解

一、运算符分类与功能‌

1‌.算术运算符‌

  • 基本运算‌:+(加)、-(减)、*(乘)、/(除)、%(取模)
csharp 复制代码
int a = 10 / 3;    // 结果为3(整数除法)  
double b = 10.0 / 3; // 结果为3.333...  
  • ‌自增/自减‌:++(前置/后置)、--(前置/后置)
csharp 复制代码
int x = 5;  
int y = x++;  // y=5(后置:先赋值后自增)  
int z = ++x;  // z=7(前置:先自增后赋值)  

2‌.赋值运算符‌

  • ‌简单赋值‌:=(将右值赋给左变量)
  • ‌复合赋值‌:+=、-=、*=、/=、%=(简化运算与赋值)
csharp 复制代码
int num = 10;  
num += 5;  // 等效于 num = num + 5  

3‌.关系运算符‌

  • ‌比较值‌:==(相等)、!=(不等)、>、<、>=、<=
csharp 复制代码
bool result = (10 > 5);  // true  
  • 类型检查‌:is(类型兼容性判断)、as(安全类型转换)
csharp 复制代码
object obj = "Hello";  
if (obj is string) {  
    string s = obj as string;  // 转换成功返回string,否则null  
}  

4‌.逻辑运算符‌

  • ‌布尔运算‌:&&(逻辑与)、||(逻辑或)、!(逻辑非)
csharp 复制代码
bool cond1 = true, cond2 = false;  
bool res = cond1 && !cond2;  // true  
  • 短路特性‌:&&和||若左操作数已确定结果,则跳过右操作数计算

‌5.位运算符‌

  • 位操作‌:&(按位与)、|(按位或)、^(异或)、~(取反)、<<(左移)、>>(右移)
csharp 复制代码
int x = 5;          // 二进制 0101  
int y = x << 2;     // 左移两位 → 10100(十进制20)  

‌6.条件运算符(三元运算符)‌

  • ‌语法‌:条件 ? 表达式1 : 表达式2
csharp 复制代码
int score = 80;  
string grade = score >= 60 ? "及格" : "不及格";//返回"及格",也就是说是true返回":"号左侧的,否则返回右侧的

二、运算符优先级与结合性‌

‌优先级‌ ‌运算符类型‌ ‌ 示例‌
最高 括号()、成员访问. (a + b) * c
一元运算符(!、++、--) !flag、++x
乘除/取模(*、/、%) a * b + c
加减(+、-) x + y - z
关系运算符(>、<等) a > b && c < d
最低 赋值运算符(=、+=等) x = y + 5

‌关键规则‌:

  • 同优先级运算符按‌从左到右‌顺序执行(赋值运算符除外,如=从右向左结合)‌
  • 使用括号显式指定优先级可提升代码可读性

三、特殊运算符与场景‌

1‌.类型转换运算符‌

  • 显式转换‌:(目标类型)值(可能引发溢出异常)
csharp 复制代码
double d = 3.14;  
int i = (int)d;  // i=3  
  • 安全转换‌:as运算符(失败返回null,仅适用于引用类型和可空类型)‌

‌2.溢出控制运算符‌

  • checked/unchecked‌:控制算术运算是否检查溢出
csharp 复制代码
checked {  
    int max = int.MaxValue;  
    int overflow = max + 1;  // 抛出OverflowException  
}  

3‌.空合并运算符‌

  • 语法‌:??(若左值为null,返回右值)
csharp 复制代码
string name = null;  
string displayName = name ?? "未知";  // 返回"未知"  

‌四、使用建议‌

  • ‌避免歧义‌:复杂表达式使用括号明确优先级‌
  • 慎用自增/自减‌:避免在单个表达式中多次修改同一变量(如x = x++ + ++x)‌
  • ‌类型安全优先‌:优先使用as而非显式转换,防止运行时异常‌
  • ‌性能优化‌:利用逻辑运算符的短路特性减少冗余计算‌
相关推荐
fat house cat_16 分钟前
【netty】基于主从Reactor多线程模型|如何解决粘包拆包问题|零拷贝
java·服务器·网络·netty
.格子衫.19 分钟前
022数据结构之树状数组——算法备赛
数据结构·算法·1024程序员节
黑科技Python31 分钟前
生活中的“小智慧”——认识算法
学习·算法·生活
Yupureki32 分钟前
从零开始的C++学习生活 16:C++11新特性全解析
c语言·数据结构·c++·学习·visual studio
青云交36 分钟前
Java 大视界 -- Java 大数据在智能教育学习社区互动模式创新与用户活跃度提升中的应用(426)
java·大数据·学习·flink 实时计算·智能教育社区·互动模式创新·用户活跃度
神奇的海马体1 小时前
Tomcat隐藏版本号
java·tomcat
拜见老天師1 小时前
使用mybatis-plus,实现将排序时,字段值为NULL的数据排在最后
java·mybatis
汤姆yu1 小时前
基于python的化妆品销售分析系统
开发语言·python·化妆品销售分析
ScilogyHunter1 小时前
C语言标准库完全指南
c语言·开发语言
sali-tec2 小时前
C# 基于halcon的视觉工作流-章52-生成标定板
开发语言·图像处理·人工智能·算法·计算机视觉