当前位置: 首页 > news >正文

C#运算符详解

一、运算符分类与功能‌

1‌.算术运算符‌

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

2‌.赋值运算符‌

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

3‌.关系运算符‌

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

4‌.逻辑运算符‌

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

‌5.位运算符‌

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

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

  • ‌语法‌:条件 ? 表达式1 : 表达式2
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‌.类型转换运算符‌

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

‌2.溢出控制运算符‌

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

3‌.空合并运算符‌

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

‌四、使用建议‌

  • ‌避免歧义‌:复杂表达式使用括号明确优先级‌
  • 慎用自增/自减‌:避免在单个表达式中多次修改同一变量(如x = x++ + ++x)‌
  • ‌类型安全优先‌:优先使用as而非显式转换,防止运行时异常‌
  • ‌性能优化‌:利用逻辑运算符的短路特性减少冗余计算‌

相关文章:

  • 【免费】2013-2019年上市公司知识产权数据
  • 【架构艺术】Go语言微服务monorepo的代码架构设计
  • C、C++读取空格、回车符函数【getline、cin.get、cin.getline、std::noskipws】
  • 仿muduo库实现高并发服务器-面试常见问题
  • C#核心(22)string
  • 从0开始完成基于异步服务器的boost搜索引擎
  • 可重构智能表面(RIS)的全面介绍
  • 渐进稀疏注意力PSA详解及代码复现
  • KMP 算法的 C 语言实现
  • ROS2-话题学习
  • RabbitMQ高级特性--消息确认机制
  • [网络爬虫] 动态网页抓取 — Selenium 入门操作
  • 搞定python之一----开发环境配置
  • AtCoder Beginner Contest 396(ABCDEF)
  • 【LLM】大模型推理、微调显卡挑选一览表
  • 【论文解读】《LIMO: Less is More for Reasoning》
  • PHP的Workerman 和 Java 常驻内存的相似性
  • Java【网络原理】(3)网络编程续
  • 如何避免项目后期盲目加人赶工
  • 机试准备第13天
  • 网站扩展名/seo排名优化联系13火星软件
  • 第一推是谁做的网站/今日油价92汽油价格表
  • 网站报价单模板/旅游景点推广软文
  • 网站制作好了怎么上传/网页设计师
  • 做试题的网站/株洲seo推广
  • 微信网站案例/seo外包公司如何优化