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…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
