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

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 开始。
image-20231026194657016
图9.1 整数字面量的格式

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

表9.1 整数字面量的后缀
image-20231026194806035

​ 可以在数字字面量中插入分隔符以看清数字大小:

Console.WriteLine("5_000_000_000 is much easier to read than 5000000000");

9.2.2 实数字面量

image-20231026195103342
图9.2 实数字面量的格式
表9.2 实数字面量的后缀
image-20231026195144225

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 字符串字面量

​ 字符串字面量类型包括两种:

  1. 常规字符串字面量。

    可以包含上述 4 种字符字面量。

  2. 逐字字符串字面量。

    • 以 @ 字符为前缀。
    • 字符串中的转义序列不会被求值。
image-20231026200219671 image-20231026200249679 image-20231026200307102
图9.3 逐字字符串字面量示例

​ 说明:编译器让相同的字符串字面量共享堆中的同一内存位置以节约内存。

9.3 求值顺序

9.3.1 优先级

表9.3 运算符优先级:从高到低
image-20231026200928386

9.3.2 结合性

表9.4 运算符结合性总结
image-20231026201032831

9.4 简单算术运算符

表9.5 简单算术运算符
image-20231026201130164

9.5 求余运算符

表9.6 求余运算符
image-20231026201232186

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

image-20231026201344103 image-20231026201351887
图9.4 求余运算符计算实余数

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

image-20231026201459909
图9.5 关系比较运算符和相等比较运算符

比较操作和相等性操作

  • **浅比较:**对于大多数引用类型来说,比较相等性时,只比较它们的引用。
    • 如果指向相同的引用对象,则为 true;否则为 false。
    • 因此,若两个不同的引用指向的对象值内容相同,也返回 false。
image-20231026201825975
图9.6 比较引用类型的相等性
  • **深比较:**string 类型对象不使用浅比较,而是比较字符值是否相等。
    • 如果两个字符串有相同的长度和内容(区分大小写),则为 true;否则为 false;
    • 即使两个字符串占用不同的内存区域,如果值相同,也会返回 true。

​ 委托也是引用类型,也使用深比较。

9.7 递增运算符和递减运算符(*)

9.8 条件逻辑运算符(*)

9.9 按位逻辑运算符(*)

9.10 移位运算符(*)

9.11 赋值运算符(*)

9.12 条件运算符(*)

9.13 一元算术运算符(*)

9.14 用户定义的类型转换

隐式转换

​ 使用 public 和 static 修饰符,implicit 表明为隐式转换:

image-20231026203218549
图9.7 定义隐式转换

显示转换

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

image-20231026203349461
图9.8 定义显示转换

9.15 运算符重载

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

​ 运算符重载的说明:

  • 必须同时使用 public 和 static。
  • 运算符方法必须是要操作的类或结构的成员。
image-20231026203844526
图9.10 运算符重载示例

9.15.1 运算符重载的示例(*)

9.15.2 运算符重载的限制

​ 可重载的一元运算符:+、-、!、~、++、–、true、false。

​ 可重载的二元运算符:+、-、*、/、%、&、|、^、<<、>>、==、!=、>、<、>=、<=。

​ 运算符重载不能:

  • 创建新运算符。
  • 改变运算符的语法。
  • 重新定义运算符如何处理预定义类型。
  • 改变运算符的优先级或结合性。

​ 对于 ++ 和 – 运算符,重载只能提供一个方法体。当对对象使用前置或后置运算时,编译器将做出不同操作的处理:

  • 前置运算:
    • 直接在对象上执行重载代码。
    • 返回对象。
  • 后置运算:
    • 首先浅拷贝对象。
    • 在拷贝对象上执行重载代码。
    • 返回拷贝对象。

​ 因此,对引用类型(class)使用后置操作,返回结果将和前置操作一样,因为浅拷贝引用指向的对象就是原对象。但是对值类型(struct)使用后置操作不会出现这种现象。

​ 最好对 struct 使用后置递增 / 递减,而不是 class。

9.16 typeof 运算符

​ typeof 运算符返回参数对应的 System.Type 对象。

9.17 nameof 运算符

​ 即使参数使用完全限定名,nameof 运算符也只返回其参数的非限定名称。

image-20231026233007302
图9.11 nameof 运算符示例

9.18 其他运算符

  • 空接合运算符
  • 空条件运算符

相关文章:

C# 图解教程 第5版 —— 第9章 表达式和运算符

文章目录 9.1 表达式&#xff08;*&#xff09;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

需求&#xff1a;Windows dhcp日志需要实时传输到elk或者其他告警平台。 1、filebeat下载地址&#xff1a;https://www.elastic.co/cn/downloads/beats/filebeat 2、下载后解压后配置filebeat.yml文件&#xff0c; 3、README.md文件中有运行的操作方法&#xff1a;cmd上进入f…...

Interview of ING internship for master thesis: LLM

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 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 &#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 &#xff1a; 输入&#xff1a;num "1432219", k 3 输出&#xff1a;"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 的缩写&#xff0c;是一种解决跨域数据获取的方案。由于浏览器的同源策略限制&#xff0c;不同域名之间的前端JS代码不能相互访问到对方的数据&#xff0c;JSONP通过script标签的特性&#xff0c;实现在不同域名的网页间传递数据。 其原理是…...

荣电集团与钕希科技签署全面战略合作

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

C语言_文件_进程_进程间通讯 常用函数/命令 + 实例

文件相关命令&#xff1a; ps -aux|grep init? //搜索包含init名称的进程 top //linux下的资源管理器&#xff08;动态&#xff09;//open 返回的int 是给后面的读/写/光标移动 用的fd&#xff0c;没有open就不能进行后面的操作&#xff1b; int op…...

力扣第406题 根据身高重建队列 c++ 贪心思维

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

postgresSQL 数据库本地创建表空间读取本地备份SQL文件

使用pgAdmin4&#xff0c;你安装PG得文件夹****/16/paAdmin 4 /runtime/pgAdmin4.exe 第一步&#xff1a;找到Tablespaces 第二步&#xff1a;创建表空间名称 第三步&#xff1a;指向数据文件 第四步&#xff1a;找到Databases&#xff0c;创建表空间 第五步&#xff1a;输入数…...

贝锐花生壳内网穿透推出全新功能,远程业务连接更安全

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

NIO和BIO编程

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

嵌入式系统设计师考试笔记之操作系统基础复习笔记二

目录 3、任务管理 &#xff08;1&#xff09;嵌入式操作系统的任务管理可以分为 &#xff08;2&#xff09;进程 &#xff08;3&#xff09;线程 &#xff08;4&#xff09;任务 &#xff08;5&#xff09;任务的创建与中止 &#xff08;6&#xff09;任务的状态任务有三…...

读图数据库实战笔记01_初识图

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

K-Means和KNN

主要区别 从无序 —> 有序 从K-Means —> KNN KNN&#xff1a;监督学习&#xff0c;类别是已知的&#xff0c;对已知分类的数据进行训练和学习&#xff0c;找到不同类的特征&#xff0c;再对未分类的数据进行分类。K-Means&#xff1a;无监督学习&#xff0c;事先不知道…...

【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 电子书阅读系统

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

百度文心一言4.0抢先体验教程!

&#x1f341; 展望&#xff1a;关注我, AI学习之旅上&#xff0c;我与您一同成长&#xff01; 一、 引言 想快速体验文心一言4.0&#xff0c;但又觉得技术难度太高&#xff1f;别担心&#xff0c;我来手把手教你&#xff01; &#x1f680; 10月17日&#xff0c;文心一言4.0…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...