C#运算符详解

embedded/2025/3/14 22:22:06/

一、运算符分类与功能‌

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而非显式转换,防止运行时异常‌
  • ‌性能优化‌:利用逻辑运算符的短路特性减少冗余计算‌

http://www.ppmy.cn/embedded/172129.html

相关文章

C# 初学者的系统学习路径与职业规划指南

C#基础知识与核心技能 C# 初学者的系统学习路径与职业规划指南一、基础知识与核心技能二、进阶技能与设计模式三、.NET Core 程序员的职业规划引用来源1. **Stack Overflow**2. **GitHub**3. **Reddit 社区**4. **Discord 社区**5. **Microsoft Learn**6. **YouTube 频道**7. *…

计算机考研C语言

C语言程序设计从入门到精通【2025完整版】考研复试 嵌入式 计算机二级 软考 专升本也适用_哔哩哔哩_bilibili 1、第一个C程序 helloC #include <stdio.h>int main(){printf("hehe");return 0;}每个C语言程序不管有多少行代码&#xff0c;都是从main函数开始执…

pytorch常用参数初始化

一、基础初始化方法 1. 全零初始化&#xff08;Zero Initialization&#xff09; • 方法&#xff1a;权重初始化为0&#xff08;不推荐用于隐藏层&#xff09; • 问题&#xff1a;导致所有神经元对称更新&#xff0c;失去多样性 • PyTorch代码&#xff1a; python nn.init…

ThinkPHP框架中各模块通过MVC架构和扩展机制协同工作形成完整的请求处理流程

在ThinkPHP框架中&#xff0c;各模块通过MVC架构和扩展机制协同工作&#xff0c;形成完整的请求处理流程。以下是核心模块的功能及协作关系分析&#xff1a; 一、路由&#xff08;Route&#xff09; 作用&#xff1a; 负责将HTTP请求的URL映射到具体的控制器和方法&#xff0c…

SpringBoot 统一异常处理

首先定义一个统一管理所有异常的类&#xff0c;加上注解RestControllerAdvice定义处理不同异常的方法&#xff0c;加上注解 ExceptionHandler RestControllerAdvice public class GlobalExceptionHandler {private static final Logger log LoggerFactory.getLogger(GlobalExc…

【python|二分|leetcode441】一题搞清楚二分区间问题---闭区间、左闭右开、左开右闭、全开区间

every blog every motto: Although the world is full of suffering&#xff0c; it is full also of the overcoming of it 0. 前言 一题搞清楚二分区间问题—闭区间、左闭右开、左开右闭、全开区间 0.1 题目&#xff1a;Problem: 441. 排列硬币 你总共有 n 枚硬币&#x…

06-基于vs2022的c语言笔记——控制流

目录 往期精彩回顾&#xff0c;c语言笔记正在更新中&#xff01;&#xff0c;敬请期待&#xff01; 前言 6-1if switch语句 6-1-1if语句 0.if语句的难度与上一章表达式的知识你是否掌握透彻息息相关&#xff0c;因此在学习之前务必好好复习表达式的知识 1.首先介绍什么是…

oXygen XML Editor—— XML编辑与结构化内容管理的优秀工具

Oxygen XML Editor是用于XML创作和开发的重要工具&#xff0c;为所有用户&#xff08;从初学者到专家&#xff09;量身定制的&#xff0c;它是通用的、跨平台的&#xff0c;并且可以作为独立应用程序和Eclipse插件使用。凭借对XML技术的强大支持&#xff0c;它提供了易于创建、…