C# 图解教程 第5版 —— 第9章 表达式和运算符
文章目录
- 9.1 表达式(*)
- 9.2 字面量
- 9.2.1 整数字面量
- 9.2.2 实数字面量
- 9.2.3 字符字面量
- 9.2.4 字符串字面量
- 9.3 求值顺序
- 9.3.1 优先级
- 9.3.2 结合性
- 9.4 简单算术运算符
- 9.5 求余运算符
- 9.6 关系比较运算符和相等比较运算符
- 9.7 递增运算符和递减运算符(*)
- 9.8 条件逻辑运算符(*)
- 9.9 按位逻辑运算符(*)
- 9.10 移位运算符(*)
- 9.11 赋值运算符(*)
- 9.12 条件运算符(*)
- 9.13 一元算术运算符(*)
- 9.14 用户定义的类型转换
- 9.15 运算符重载
- 9.15.1 运算符重载的示例(*)
- 9.15.2 运算符重载的限制
- 9.16 typeof 运算符
- 9.17 nameof 运算符
- 9.18 其他运算符
9.1 表达式(*)
9.2 字面量
9.2.1 整数字面量
- 十六进制整数:以 0x 或 0X 开始。
- 二进制整数:以 0b 或 0B 开始。

十六进制和二进制记法用前缀指定,实际的数据类型用后缀指定。

可以在数字字面量中插入分隔符以看清数字大小:
Console.WriteLine("5_000_000_000 is much easier to read than 5000000000");
9.2.2 实数字面量


9.2.3 字符字面量
字符字面量包括:
- 单个字符:char。
- 简单转义序列:反斜杠 + 单个字符。
- 十六进制转义序列:反斜杠 + x/X + 4 位十六进制数字。
- Unicode 转义序列:反斜杠 + u/U + 4 位十六进制数字。
char c1 = 'd'; // 单个字符
char c2 = '\n'; // 简单转义序列
char c3 = '\x0061'; // 十六进制转义序列
char c4 = '\u005a'; // Unicode 转义序列
9.2.4 字符串字面量
字符串字面量类型包括两种:
-
常规字符串字面量。
可以包含上述 4 种字符字面量。
-
逐字字符串字面量。
- 以 @ 字符为前缀。
- 字符串中的转义序列不会被求值。



说明:编译器让相同的字符串字面量共享堆中的同一内存位置以节约内存。
9.3 求值顺序
9.3.1 优先级

9.3.2 结合性

9.4 简单算术运算符

9.5 求余运算符

求余运算符还可以用于实数以得到实余数:


9.6 关系比较运算符和相等比较运算符

比较操作和相等性操作
- **浅比较:**对于大多数引用类型来说,比较相等性时,只比较它们的引用。
- 如果指向相同的引用对象,则为 true;否则为 false。
- 因此,若两个不同的引用指向的对象值内容相同,也返回 false。

- **深比较:**string 类型对象不使用浅比较,而是比较字符值是否相等。
- 如果两个字符串有相同的长度和内容(区分大小写),则为 true;否则为 false;
- 即使两个字符串占用不同的内存区域,如果值相同,也会返回 true。
委托也是引用类型,也使用深比较。
9.7 递增运算符和递减运算符(*)
9.8 条件逻辑运算符(*)
9.9 按位逻辑运算符(*)
9.10 移位运算符(*)
9.11 赋值运算符(*)
9.12 条件运算符(*)
9.13 一元算术运算符(*)
9.14 用户定义的类型转换
隐式转换
使用 public 和 static 修饰符,implicit 表明为隐式转换:

显示转换
和隐式转换一样,但使用 explicit 而不是 implicit。图 9.8 使用箭头标出了不同之处:

9.15 运算符重载
- 运算符重载只能用于类和结构。
- 使用 operator x 重载运算符 x。
- 一元运算符重载方法只带一个单独的 class 或 struct 参数。
- 二元运算符重载方法带两个参数,至少有一个需要为 class 或 struct。

运算符重载的说明:
- 必须同时使用 public 和 static。
- 运算符方法必须是要操作的类或结构的成员。

9.15.1 运算符重载的示例(*)
9.15.2 运算符重载的限制
可重载的一元运算符:+、-、!、~、++、–、true、false。
可重载的二元运算符:+、-、*、/、%、&、|、^、<<、>>、==、!=、>、<、>=、<=。
运算符重载不能:
- 创建新运算符。
- 改变运算符的语法。
- 重新定义运算符如何处理预定义类型。
- 改变运算符的优先级或结合性。
对于 ++ 和 – 运算符,重载只能提供一个方法体。当对对象使用前置或后置运算时,编译器将做出不同操作的处理:
- 前置运算:
- 直接在对象上执行重载代码。
- 返回对象。
- 后置运算:
- 首先浅拷贝对象。
- 在拷贝对象上执行重载代码。
- 返回拷贝对象。
因此,对引用类型(class)使用后置操作,返回结果将和前置操作一样,因为浅拷贝引用指向的对象就是原对象。但是对值类型(struct)使用后置操作不会出现这种现象。
最好对 struct 使用后置递增 / 递减,而不是 class。
9.16 typeof 运算符
typeof 运算符返回参数对应的 System.Type 对象。
9.17 nameof 运算符
即使参数使用完全限定名,nameof 运算符也只返回其参数的非限定名称。

9.18 其他运算符
- 空接合运算符
- 空条件运算符
相关文章:

C# 图解教程 第5版 —— 第9章 表达式和运算符
文章目录 9.1 表达式(*)9.2 字面量9.2.1 整数字面量9.2.2 实数字面量9.2.3 字符字面量9.2.4 字符串字面量 9.3 求值顺序9.3.1 优先级9.3.2 结合性 9.4 简单算术运算符9.5 求余运算符9.6 关系比较运算符和相等比较运算符9.7 递增运算符和递减运算符&#…...

TIA博途_Profinet通信故障诊断及常见错误解决方法汇总
TIA博途_Profinet通信故障诊断及常见错误解决方法汇总 1. 在线诊断报硬件组件的用户数据错误,设备组态不支持 解决方法: (1)检查模块终端盖板; (2)检查组态模块与实际组装模块顺序型号是否一致。 2. 网络视图,设备视图界面显示黑色感叹号 解决方法: PLC转离线,下载硬…...

Windows server部署filebeat到kafka
需求:Windows dhcp日志需要实时传输到elk或者其他告警平台。 1、filebeat下载地址:https://www.elastic.co/cn/downloads/beats/filebeat 2、下载后解压后配置filebeat.yml文件, 3、README.md文件中有运行的操作方法:cmd上进入f…...
Interview of ING internship for master thesis: LLM
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1. Background2. Interview2.1 Intro2.2 project experience2.3 问题2.4 Q&A 总结 Interview of ING internship for master thesis: LLM 1. Background Proje…...
华为校招第三题 找最小数
给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 : 输入:num "1432219", k 3 输出:"1219" 解…...

大数据Flink(一百零三):SQL 表值聚合函数(Table Aggregate Function)
文章目录 SQL 表值聚合函数(Table Aggregate Function) SQL 表值聚合函数(Table Aggregate Function) Python UDTAF,即 Python TableAggregateFunction。Python UDTAF 用来针对一组数据进行聚合运算,比如同一个 window 下的多条数据、或者同一个 key 下的多条数据等,与…...

php+JavaScript实现callback跨域请求jsonp数据
摘要 JSONP 是 JSON with Padding 的缩写,是一种解决跨域数据获取的方案。由于浏览器的同源策略限制,不同域名之间的前端JS代码不能相互访问到对方的数据,JSONP通过script标签的特性,实现在不同域名的网页间传递数据。 其原理是…...

荣电集团与钕希科技签署全面战略合作
10月26日,荣电集团(以下简称荣电)与钕希科技南京有限公司(以下简称钕希科技)今天在合肥市签署全面战略合作协议,联合进军混合现实(Mixed Reality,以下简称MR)空间计算高科…...

C语言_文件_进程_进程间通讯 常用函数/命令 + 实例
文件相关命令: ps -aux|grep init? //搜索包含init名称的进程 top //linux下的资源管理器(动态)//open 返回的int 是给后面的读/写/光标移动 用的fd,没有open就不能进行后面的操作; int op…...

力扣第406题 根据身高重建队列 c++ 贪心思维
题目 406. 根据身高重建队列 中等 相关标签 贪心 树状数组 线段树 数组 排序 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &am…...

postgresSQL 数据库本地创建表空间读取本地备份SQL文件
使用pgAdmin4,你安装PG得文件夹****/16/paAdmin 4 /runtime/pgAdmin4.exe 第一步:找到Tablespaces 第二步:创建表空间名称 第三步:指向数据文件 第四步:找到Databases,创建表空间 第五步:输入数…...

贝锐花生壳内网穿透推出全新功能,远程业务连接更安全
贝锐旗下内网穿透兼动态域名解析品牌花生壳目前推出了全新的“访问控制”功能,可精确设置访问权限,充分保障信息安全,满足更多用户安全远程访问内网服务的需求。 通过这一功能,可实现指定时间、IP、地区等条件下才能远程访问映射的…...

NIO和BIO编程
一、网络通信编程基本常识 1、什么是Socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,一般由操作系统提供。 2、短连接 短连接是指socket建立连接之后传输数据确定接收完后关闭连接 3、长连接 长连接是指建立so…...

嵌入式系统设计师考试笔记之操作系统基础复习笔记二
目录 3、任务管理 (1)嵌入式操作系统的任务管理可以分为 (2)进程 (3)线程 (4)任务 (5)任务的创建与中止 (6)任务的状态任务有三…...

读图数据库实战笔记01_初识图
1. 图论 1.1. 起源于莱昂哈德欧拉在1736年发表的一篇关于“哥尼斯堡七桥问题”的论文 1.2. 要解决这个问题,该图需要零个或两个具有奇数连接的节点 1.3. 任何满足这一条件的图都被称为欧拉图 1.4. 如果路径只访问每条边一次,则该图具有欧拉路径 1.5…...

K-Means和KNN
主要区别 从无序 —> 有序 从K-Means —> KNN KNN:监督学习,类别是已知的,对已知分类的数据进行训练和学习,找到不同类的特征,再对未分类的数据进行分类。K-Means:无监督学习,事先不知道…...
【Python】【Flask】flask_login的初始化
【背景】 想要更高效地用现有的Flask_login包来实现用户管理方面的常用功能会话管理等。不想再手搓了。 【要点】 首先引入flask_login from flask_login import LoginManager, login_user, login_required, logout_user,current_user然后进行app级别的设置和初始化 login…...

Spring Cloud之API网关(Gateway)
目录 API网关 好处 解决方案 Gateway 简介 特征 核心概念 Route(路由) Predicate(断言) Filter(过滤器) 工作流程 Route(路由) 路由配置方式 1.yml配置文件路由 2.bean进行配置 3.动态路由 动态路由 Predicate(断言) 特点 常见断言 示例 Filter(过滤器) …...

nodejs+vue 电子书阅读系统
本文首先介绍了电子书阅读系统的发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,随着网络技术的不断发展,多媒体技术应用渐渐的出现在教育领域中,电子书阅读已经成为社会的一个热…...

百度文心一言4.0抢先体验教程!
🍁 展望:关注我, AI学习之旅上,我与您一同成长! 一、 引言 想快速体验文心一言4.0,但又觉得技术难度太高?别担心,我来手把手教你! 🚀 10月17日,文心一言4.0…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...