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

news2024/12/24 9:50:57

文章目录

    • 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 其他运算符

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1138516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Babylonjs学习笔记(五)——创建PBR材质

书接上回&#xff0c;这里讨论PBR材质&#xff01;&#xff01;&#xff01; // 创建天空盒/* */const createSkyBox (scene:Scene):void>{const envTex CubeTexture.CreateFromPrefilteredData(./env/environment.env,scene)scene.environmentTexture envTex;scene.cre…

HTTP 之 options预请求 nginx 解决跨域 postman调试跨域问题

一、HTTP一共有八种常见请求方法 get&#xff1a;参数在url上&#xff0c;浏览器长度有限制&#xff0c;不安全post&#xff1a;参数不可见&#xff0c;长度不受限制put&#xff1a;上传最新内容到指定位置delete&#xff1a;删除请求的url所表示的资源head&#xff1a;不返回…

Android stdio 无法新建或打开AIDL文件(解决方法)

1.在gradle文件中添加如下代码 2.AIDL要求minsdk>16,并且要使aidl true&#xff08;在Gradle中添加&#xff09; android{ buildFeatures { aidl true } } 我们看见&#xff0c;可以创建AIDL文件了 3.接着&#xff0c;我们看到文件出现如下提示 4.在gradle…

CGAL+QT

先安装CGAL和QT 安装完QT其中MSVC 这两个没配置 1、x32配置选择的是 x64配置选择的是 2、CGAL 5.4.5 - Manual: Using CGAL on Windows (with Visual C) 参数文章配置一些环境变量 3、 测试 新建build 进行cmake QT、Boost、CGAL都自动匹配上了&#xff08;环境变量已经配…

出租屋智能视频监控系统方案:全面保卫租客安全

除了我们常见的家庭、社区、园区等智能监控&#xff0c;出租房作为很多人的暂住所也极易发生盗窃等事件&#xff0c;为保障大众租户的财产安全&#xff0c;旭帆科技特地针对出租屋制定了智能监控系统方案。 1、安装智能安防摄像头 高清晰度、夜视功能良好的智能摄像头&#xf…

vue 复杂的流程图实现--antv/g6

可以先看下对应的文档&#xff1a;G6 Demos - AntV npm install --save antv/g6 实现如图&#xff1a; <template><div class"drawflow"><div id"mountNode"></div></div> </template> <script> import G6 fr…

FreeRTOS 互斥量 优先级反转(翻转)和优先级继承 详解

目录 什么是互斥量&#xff1f; 什么是优先级反转&#xff08;翻转&#xff09;和优先级继承 互斥量相关 API 函数 优先级反转&#xff08;翻转&#xff09;示例 使用互斥量优化优先级反转&#xff08;翻转&#xff09;问题示例 什么是互斥量&#xff1f; 在多数情况下&a…

Perl爬虫程序

以下是一个使用Perl爬虫程序&#xff0c;用于爬取图像。每行代码的中文解释如下&#xff1a; #!/usr/bin/perl ​ use strict; use warnings; use Mojo::UserAgent; use JSON; ​ # 创建一个Mojo::UserAgent实例 my $ua Mojo::UserAgent->new; ​ # 使用获取代理 my $prox…

【机器学习可解释性】2.特征重要性排列

机器学习可解释性 1.模型洞察的价值2.特征重要性排列3.偏依赖图 &#xff08; partial dependence plots &#xff09;4.SHAP Value5.SHAP Value 高级使用 正文 前言 你的模型认为哪些特征最重要&#xff1f; 介绍 我们可能会对模型提出的最基本的问题之一是&#xff1a;哪…

react的table合并行时,出现border-bottom重复问题

背景&#xff1a; 需求是呈现一个表格&#xff0c;根据操作人跟操作时间是否相同来进行合并行数据 数据结构&#xff1a; 经过跟后端的同事商量&#xff0c;需要在每一行数据中返回rowSpanNum的值&#xff0c;前端在column中根据值来判断是否满足合并行&#xff08;没有合并行…

在Go项目中封装AES加解密客户端接口

1.摘要 在一个中型以上的项目中, 我们一般会在项目工程中开辟一个pkg文件夹用来存放一些基础工具接口,比如:数据库、中间件、加解密算法、基础协议等等。在这篇文章中, 我主要分享一下在基于Go语言的项目中, 加解密算法中如何封装一个通用的加解密接口, 并以使用比较广泛的AES…

day11力扣打卡

打卡记录 避免洪水泛滥&#xff08;贪心 Map Set&#xff09; 链接 将晴天的日期全部记录到 set 中。 使用 unordered_map 来记录每个湖泊上一次下雨的日期。 当下雨时&#xff0c;湖泊已经水满了时&#xff0c;查询到上次下雨的日期。 通过这个日期在晴天记录中查找对应的…

JS问题:项目中如何区分使用防抖或节流?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约2300字&#xff0c;整篇阅读大约需要6分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

Android 发布 15 周年了!Google 员工说出了这些年的美好回忆

原文链接&#xff1a;https://blog.google/products/android/android-15th-anniversary-googler-highlights/ 作者&#xff1a;Sameer Samat, GM and VP of Android Ecosystem 翻译者&#xff1a;张拭心 https://shixin.blog.csdn.net/ 自从带有 Android Market&#xff08;现在…

MVC架构_Qt自己的MV架构

文章目录 前言模型/视图编程1.先写模型2. 视图3. 委托 例子&#xff08;Qt代码&#xff09;例1 查询本机文件系统例2 标准模型项操作例3 自定义模型示例:军事武器模型例4 只读模型操作示例例5 选择模型操作例6 自 定 义委 托(在testSelectionModel上修改) 前言 在Qt中&#xf…

Git(四)底层命令:git对象、树对象、提交对象

目录 一、知识回顾1.1 Linux 基础命令1.2 .git 文件夹解析 二、git 对象&#xff08;数据对象&#xff09;2.1 hash-object 存储对象2.2 cat-file 查看对象 三、树对象3.1 ls-files 查看暂存区3.2 update-index 创建暂存区3.3 write-tree 生成树对象3.4 更新暂存区&#xff0c;…

C/C++面试常见问题——const关键字的作用和用法

首先我们需要一下const关键字的定义&#xff0c;const名叫常量限定符&#xff0c;当const修饰变量时&#xff0c;就是在告诉编译器该变量只可访问不可修改&#xff0c;而编译器对于被const修饰的变量有一个优化&#xff0c;编译器不会专门为其开辟空间&#xff0c;而是将变量名…

Liunx两台服务器实现相互SSH免密登录

一、首先准备两台Linux虚拟机当作此次实验的两台服务器 服务器1&#xff1a;server IPV4&#xff1a;192.168.110.136 服务器2&#xff1a;client IPV4&#xff1a; 192.168.110.134 二、准备阶段 [rootserver ~]# systemctl disable firewalld #关…

【MySQL索引与优化篇】InnoDB数据存储结构

文章目录 1. 数据库的存储结构:页1.1 磁盘与内存交互基本单位:页1.2 页结构概述1.3 页的上层结构 2. 页的内部结构3. InnoDB行格式(或记录格式)3.1 Compact行格式3.2 Dynamic和Compressed行格式3.3 Redundant行格式 4. 区、段与碎片区4.1 为什么要有区&#xff1f;4.2 为什么要…

Webpack简介及打包演示

Webpack 是一个静态模块打包工具&#xff0c;从入口构建依赖图&#xff0c;打包有关的模块&#xff0c;最后用于展示你的内容 静态模块&#xff1a;编写代码过程中的&#xff0c;html&#xff0c;css&#xff0c; js&#xff0c;图片等固定内容的文件 打包过程&#xff0c;注…