【从零开始入门unity游戏开发之——C#篇07】赋值运算符、算术运算符、复合运算符、比较运算符、null 合并赋值运算符 (??=)、string字符串拼接

server/2024/12/17 17:57:32/

文章目录

  • 一、赋值运算符
    • 1、普通赋值
    • 2、链式赋值
  • 二、算术运算符
    • 1、**加法运算符 (`+`)**
    • 2、**减法运算符 (`-`)**
    • 3、**乘法运算符 (`*`)**
    • 4、**除法运算符 (`/`)**
    • 5、**取余运算符 (`%`)**
    • 6、**自增运算符 (`++`)**
    • 7、**自减运算符 (`--`)**
    • 8、运算符优先级
    • 9、示例:所有算术运算符一起使用
    • 10、其他注意事项:
    • 11、总结
  • 三、复合运算符
    • 1、加法赋值符号 (+=)
    • 2、减法赋值符号 (-=)
    • 3、乘法赋值符号 (*=)
    • 4、除法赋值符号 (/=)
    • 5、取余赋值符号 (%=)
  • 四、比较运算符
    • 1、**大于(`>`)**
    • 2、**小于(`<`)**
    • 3、**等于(`==`)**
    • 4、**不等于(`!=`)**
    • 5、**大于等于(`>=`)**
    • 6、**小于等于(`<=`)**
    • 7、注意事项:
    • 8、总结:
  • 五、null 合并赋值运算符 (??=)
    • 1、语法:
    • 2、示例:
    • 3、适用场景:
    • 4、和传统赋值运算符的区别:
  • 六、string字符串拼接
    • 1、通过`+`号来进行字符串拼接
      • 示例:
      • 注意事项:
    • 2、使用复合运算符`+=`进行字符串拼接
      • 示例:
      • 注意事项:
    • 3、`string.Format`进行字符串拼接
      • 示例:
      • 优点:
      • 注意事项:
    • 4、使用 String.Concat 进行字符串拼接
      • 示例:
      • 优点:
    • 5、使用`$`插值字符串
      • 示例:
      • 优点:
      • 注意事项:
  • 专栏推荐
  • 完结

一、赋值运算符

前面介绍变量的时候,其实我们已经用过很多次了

1、普通赋值

赋值符号其实就是 =,它将右侧的值赋给左侧的变量。

比如:

int a = 5;   // 将 5 赋值给变量 a
string name = "Alice";   // 将字符串 "Alice" 赋值给变量 name

2、链式赋值

在 C# 中,你可以进行链式赋值,即一个变量可以同时被赋值多个值。赋值的顺序从右到左进行。

示例:

int a, b, c;
a = b = c = 10;  // a, b, c 都被赋值为 10

二、算术运算符

算数运算符是用于数值类型变量计算的运算符,它的返回结果是数值

1、加法运算符 (+)

加法运算符用于对两个数进行相加操作。

int a = 5;
int b = 3;
int sum = a + b;  // sum = 8

2、减法运算符 (-)

减法运算符用于对两个数进行相减操作。

int a = 5;
int b = 3;
int difference = a - b;  // difference = 2

3、乘法运算符 (*)

乘法运算符用于对两个数进行相乘操作。

int a = 5;
int b = 3;
int product = a * b;  // product = 15

4、除法运算符 (/)

除法运算符用于对两个数进行相除操作。注意:在整数除法中,如果结果是小数,它会被舍弃,保留整数部分。

int a = 5;
int b = 2;
int quotient = a / b;  // quotient = 2 (舍弃小数部分)

如果想得到浮点数结果,可以将其中一个数转换为浮点数(floatdouble):

double a = 5;
double b = 2;
double quotient = a / b;  // quotient = 2.5

5、取余运算符 (%)

取余运算符用于获取两个数相除后的余数。

int a = 5;
int b = 3;
int remainder = a % b;  // remainder = 2 (5 除以 3,余数为 2)

6、自增运算符 (++)

自增运算符用于将变量的值增加 1。它有两种形式:前自增和后自增。

  • 前自增 (++a):先增加再使用该变量。
  • 后自增 (a++):先使用该变量,再增加。
int a = 5;
int b = ++a;  // 前自增,a 变为 6,b 也为 6
int c = a++;  // 后自增,a 变为 7,但 c 是 6

7、自减运算符 (--)

自减运算符用于将变量的值减少 1。它也有前自减和后自减两种形式。

  • 前自减 (--a):先减少再使用该变量。
  • 后自减 (a--):先使用该变量,再减少。
int a = 5;
int b = --a;  // 前自减,a 变为 4,b 也为 4
int c = a--;  // 后自减,a 变为 3,但 c 是 4

8、运算符优先级

C# 中的算术运算符有优先级,按照优先级从高到低的顺序如下:

  1. 自增(++)和自减(--)运算符
  2. 乘法(*)、除法(/)、取余(%
  3. 加法(+)和减法(-
  4. 括号可以改变有优先级,优先括号里的内容。
  5. 多组括号,先算最里面括号,再依次往外算

9、示例:所有算术运算符一起使用

using System;class Program
{static void Main(){int a = 10;int b = 3;// 加法Console.WriteLine("加法: " + (a + b));  // 13// 减法Console.WriteLine("减法: " + (a - b));  // 7// 乘法Console.WriteLine("乘法: " + (a * b));  // 30// 除法Console.WriteLine("除法: " + (a / b));  // 3(整数除法)// 取余Console.WriteLine("取余: " + (a % b));  // 1// 自增Console.WriteLine("自增: " + (++a));  // a 变为 11,输出 11// 自减Console.WriteLine("自减: " + (a--));  // 输出 11,a 变为 10Console.WriteLine("自减后的 a: " + a);  // 输出 10}
}

10、其他注意事项:

  • 整数除法的结果:如果两个整数相除,结果会是整数部分。例如,5 / 2 会得到 2,而不是 2.5。如果需要浮点数结果,确保其中一个操作数是浮点数(如 floatdouble)。
  • 类型转换:如果进行不同类型的数据运算(如整型和浮点型),C# 会自动进行类型转换。例如,intdouble 计算时,结果会是 double 类型。

11、总结

  • +:加法
  • -:减法
  • *:乘法
  • /:除法
  • %:取余
  • ++:自增
  • --:自减

三、复合运算符

1、加法赋值符号 (+=)

+= 将右边的值加到左边的变量上,然后再将结果赋给左边的变量。

示例:

int a = 5;
a += 3;  // 等同于 a = a + 3; 结果是 a = 8

2、减法赋值符号 (-=)

-= 将右边的值从左边的变量中减去,然后将结果赋给左边的变量。

示例:

int a = 5;
a -= 3;  // 等同于 a = a - 3; 结果是 a = 2

3、乘法赋值符号 (*=)

*= 将左边的变量与右边的值相乘,然后将结果赋给左边的变量。

示例:

int a = 5;
a *= 3;  // 等同于 a = a * 3; 结果是 a = 15

4、除法赋值符号 (/=)

/= 将左边的变量除以右边的值,然后将结果赋给左边的变量。

示例

int a = 10;
a /= 2;  // 等同于 a = a / 2; 结果是 a = 5

5、取余赋值符号 (%=)

%= 将左边的变量除以右边的值,得到余数,然后将余数赋给左边的变量。

示例:

int a = 10;
a %= 3;  // 等同于 a = a % 3; 结果是 a = 1

四、比较运算符

在 C# 中,比较两个变量或常量时,可以使用一组常见的比较运算符。这些运算符用于判断两个值之间的关系,通常返回布尔值 truefalse。下面是 C# 中比较常用的运算符及其使用示例:

1、大于(>

判断左侧值是否大于右侧值。

语法:

a > b

示例:

int a = 10;
int b = 5;
bool result = a > b;  // true, 因为 10 大于 5
Console.WriteLine(result);

2、小于(<

判断左侧值是否小于右侧值。

语法:

a < b

示例:

int a = 3;
int b = 8;
bool result = a < b;  // true, 因为 3 小于 8
Console.WriteLine(result);

3、等于(==

判断左侧值是否等于右侧值。

语法:

a == b

示例:

int a = 5;
int b = 5;
bool result = a == b;  // true, 因为 5 等于 5
Console.WriteLine(result);

4、不等于(!=

判断左侧值是否不等于右侧值。

语法:

a != b

示例:

int a = 10;
int b = 15;
bool result = a != b;  // true, 因为 10 不等于 15
Console.WriteLine(result);

5、大于等于(>=

判断左侧值是否大于或等于右侧值。

语法:

a >= b

示例:

int a = 7;
int b = 7;
bool result = a >= b;  // true, 因为 7 大于等于 7
Console.WriteLine(result);

6、小于等于(<=

判断左侧值是否小于或等于右侧值。

语法:

a <= b

示例:

int a = 5;
int b = 10;
bool result = a <= b;  // true, 因为 5 小于等于 10
Console.WriteLine(result);

7、注意事项:

  • 在比较两个变量时,确保它们的数据类型是可以进行比较的。例如,intint 之间可以直接比较,但不同类型(如 intstring)之间不能直接使用这些比较运算符。

    bool b = "A" > 1; //报错
    
  • 比较运算符在 C# 中返回的是布尔值 truefalse

  • 条件运算符的优先级低于算数运算符。如果有计算的话,先计算再比较

    //先计算,再比较
    bool b = 3 + 3 > 7 - 1; // 输出true
    
  • 不能进行范围比较,虽然数学上我们可以这样用,但是在C#是不支持这样写的

    int i = 1;
    bool b = 3 < i < 5; // 报错
    
  • 不同数值之间,可以随意进行条件运算符比较进行

    int i = 1;
    float f = 10.1f;
    bool b = 1 > 10.1f;// 返回false
    
  • 特殊类型char string bool只能同类型进行== !=比较

    //字符串也可以进行比较
    string str1 = "Hello";
    string str2 = "Hello";
    Console.WriteLine(str1 == str2);  // 输出true
    Console.WriteLine(str1 != str2);  // 输出false
    
  • char又比较特殊,又可以和数值和自己进行大小比较

    char c = 'C';
    bool b2 = c > 'B'; //输出true
    bool b3 = c > 123; //输入false
    

8、总结:

C# 提供了多种比较运算符,帮助你判断两个值之间的关系。理解这些比较运算符是进行条件判断和控制程序流程的基础。


五、null 合并赋值运算符 (??=)

它是 C# 8.0 中引入的新特性。??= 运算符用于将左侧的操作数(变量)与右侧的操作数进行比较,如果左侧值为 null,则将右侧的值赋给左侧变量。否则,左侧变量保持不变。

1、语法:

x ??= y;
  • 如果 x 是 null,则将 y 的值赋给 x。
  • 如果 x 不是 null,则 x 保持原值,不进行赋值。

2、示例:

int? x = null;
int? y = 5;x ??= y;  // 因为 x 是 null,x 将被赋值为 y 的值,即 5
Console.WriteLine(x);  // 输出 5x ??= 10;  // 因为 x 现在不为 null,x 保持原值 5
Console.WriteLine(x);  // 输出 5

3、适用场景:

??= 运算符特别适用于处理可能为 null 的可空类型或引用类型的变量。它可以简化代码,避免显式的 if (x == null) 判断。

4、和传统赋值运算符的区别:

  • 传统的赋值运算符 = 无条件地将右侧值赋给左侧变量。
  • ??= 运算符只在左侧变量为 null 时才赋值,因此它更具条件性和灵活性。

六、string字符串拼接

在 C# 中,字符串拼接有多种方式,每种方法都有不同的使用场景和性能表现。

1、通过+号来进行字符串拼接

这是最直接且常见的字符串拼接方式。你可以通过 + 运算符将两个或多个字符串连接在一起。

示例:

int i = 100;
string str = "你考了" + i + "分";
Console.WriteLine(str);

打印结果
在这里插入图片描述
注意字符串加数字的区别

string str = "123";
str = str + 1 + 2 + 3;
Console.WriteLine(str);  // 输出 "123123"
string str = "123";
str = str + (1 + 2 + 3);  // 1 + 2 + 3 = 6,所以 str 变为 "1236"
Console.WriteLine(str);  // 输出 "1236"

注意事项:

  • + 运算符每次拼接字符串时,都会生成新的字符串对象。这可能会导致性能问题,尤其是在循环中进行多次拼接时。
  • 字符串是不可变的,每次拼接时都会创建一个新的字符串对象,导致内存分配的开销。

2、使用复合运算符+=进行字符串拼接

+= 是一种复合赋值运算符,类似于 +,但它将拼接的结果赋值回原来的变量。这种方式和 + 运算符类似,但通常用于在已有字符串的基础上进行累加。

示例:

string str = "123";
str += 1 + 2 + 3 + 4;  // str 进行累加操作,1 + 2 + 3 + 4 = 10,所以 str 变为 "12310"
Console.WriteLine(str);  // 输出 "12310"
string str = "123";
str += "" + 1 + 2 + 3 + 4;  // 这里会先将 "" 和 1 拼接成 "1",然后 "1" 和 2 拼接成 "12",依此类推,最后 str 变为 "1231234"
Console.WriteLine(str);  // 输出 "1231234"
string str = "123";
str += "" + 1 + 2 + "" + (3 + 4);//优先计算括号内容
Console.WriteLine(str);  // 输出 "123127"

注意事项:

  • 与 + 运算符类似,+= 也会在每次拼接时创建新的字符串对象,因此在循环中频繁使用 += 拼接大量字符串时,也可能会导致性能问题。

3、string.Format进行字符串拼接

string.Format 方法可以将多个变量插入到一个格式化字符串中,是一种更具可读性和灵活性的拼接方式。你可以使用占位符 {0}, {1}, {2} 等将参数插入到格式化的字符串中。

示例:

string str1 = "Hello";
string str2 = "World";
string result = string.Format("{0} {1}", str1, str2);  // 使用 string.Format 拼接
Console.WriteLine(result);  // 输出 "Hello World"

优点:

  • string.Format 提供了更强大的格式化功能,比如日期格式化、数字格式化等,适用于更复杂的字符串拼接场景。
  • 它比 + 运算符和 += 更具可读性,尤其是在需要插入多个变量时。

注意事项:

  • 相对于 ++=string.Format 在性能上略有优势,尤其是当需要格式化多个变量时。

4、使用 String.Concat 进行字符串拼接

专门用于拼接多个字符串。它的性能比 + 运算符更高,尤其是在大量拼接字符串时。

示例:

string str1 = "Hello";
string str2 = "World";
string result = string.Concat(str1, " ", str2);  // 使用 String.Concat 拼接
Console.WriteLine(result);  // 输出 "Hello World"

优点:

  • String.Concat 比 + 运算符在性能上更高效,尤其是当需要拼接多个字符串时。
  • 它不会自动插入空格或其他字符,需要手动指定。

5、使用$插值字符串

C# 6.0 引入了字符串插值功能,可以更简洁地在字符串中嵌入变量。它使用 $"..." 语法,允许直接在字符串中插入变量或表达式。

示例:

string str1 = "Hello";
string str2 = "World";
string result = $"{str1} {str2}";  // 使用插值字符串拼接
Console.WriteLine(result);  // 输出 "Hello World"

优点:

  • 语法简洁,易于阅读。
  • 在拼接多个变量时,比 string.Format 更直观。

注意事项:

  • 插值字符串会在编译时转换为 string.Format 的调用,因此在性能上与 string.Format 相似。

专栏推荐

地址
【从零开始入门unity游戏开发之——C#篇】
【从零开始入门unity游戏开发之——unity篇】
【制作100个Unity游戏
【推荐100个unity插件】
【实现100个unity特效】
unity框架开发】

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述


http://www.ppmy.cn/server/150963.html

相关文章

12月第五讲“ChatGPT在功能测试用例生成方面的优势”

内容简介 本书以目前流行的大语言模型ChatGPT为基础&#xff0c;用丰富的案例演示ChatGPT在软件测试中的赋能作用。本书主要介绍如何用ChatGPT生成需求规格说明书、测试计划、功能测试用例、自动化测试用例、接口测试用例、测试数据和性能测试用例&#xff0c;以及ChatGPT在分析…

22. 正则表达式

一、概述 正则表达式&#xff08;regular expression&#xff09;又称 规则表达式&#xff0c;是一种文本模式&#xff08;pattern&#xff09;。正则表达式使用一个字符串来描述、匹配具有相同规格的字符串&#xff0c;通常被用来检索、替换那些符合某个模式&#xff08;规则&…

Ansible自动化运维(五) 运维实战

Ansible自动化运维这部分我将会分为五个部分来为大家讲解 &#xff08;一&#xff09;介绍、无密钥登录、安装部署、设置主机清单 &#xff08;二&#xff09;Ansible 中的 ad-hoc 模式 模块详解&#xff08;15&#xff09;个 &#xff08;三&#xff09;Playbook 模式详解 …

视频监控汇聚平台方案设计:Liveweb视频智能监管系统方案技术特点与应用

随着科技的发展&#xff0c;视频监控平台在各个领域的应用越来越广泛。然而&#xff0c;当前的视频监控平台仍存在一些问题&#xff0c;如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果&#xff0c;也制约了视频监控平台的发展。 为了解决这些问…

华为设备ssh协议配置要点儿

*红宝书------华为SSH协议的配置的要点* 路由器使用ssh协议来进行配置 1&#xff0c;需要在服务器上创建ssh账户并开启ssh协议 2&#xff0c;手工配置密钥&#xff08;推荐768以上 3&#xff0c;VTY用户接口下允许开启SSH登录方式 R1配置 <Huawei>sys Enter system…

C# 方法的参数主要有四种类型:值参数、引用参数ref 、输出参数out、可变参数params

在 C# 中&#xff0c;方法的参数主要有四种类型&#xff1a;值参数、引用参数ref 、输出参数out、可变参数&#xff08;使用 params 修饰符声明&#xff09;。下面是每种参数类型的详细说明、使用注意事项。 1. 值参数 值参数是最常见的参数传递方式。当值参数被传递给方法时…

【深度学习项目】目标检测之YOLO系列-V4(二)

快速通道&#xff1a;https://blog.csdn.net/u014608435/article/details/144497816 介绍 YOLOv4&#xff08;You Only Look Once v4&#xff09;是YOLO系列目标检测算法的又一个重要版本&#xff0c;它在2020年由Alexey Bochkovskiy、Chien-Yao Wang和Hong-Yuan Mark Liao提出…

高级java每日一道面试题-2024年12月16日-数据库篇-分布式数据库中SQL的执行过程和传统数据库有什么不一样的地方?

如果有遗漏,评论区告诉我进行补充 面试官: 分布式数据库中SQL的执行过程和传统数据库有什么不一样的地方&#xff1f; 我回答: 在 Java 高级面试中&#xff0c;分布式数据库与传统单机数据库&#xff08;如 MySQL、PostgreSQL 等&#xff09;之间 SQL 执行过程的差异是一个非…