C#.Net筑基-运算符Family

image.png

C#运算符 内置了丰富的运算符操作类型,使用方便,极大的简化了编码,同时还支持多种运算符重载机制,让自定义的类型也能支持运算符行为。

01、运算符概览

运算符分类 描述
数学运算 基础的加减乘除,及++、–
赋值运算 =,及各种复合赋值op=x+=20; 等效于x=x+20;
比较运算 比较相等、大小,内置类型大多支持,自定类型需要自己重载运算符才能支持
逻辑运算符 常用的就是非!、短路逻辑与&&、短路逻辑或 ||。
位运算 二进制位运算,适当使用可极大提高数据处理性能
类型相关运算符 类型判断is、类型转换astypeof
指针操作运算符 指针相关运算符:*、&、->
其他运算符 ^..范围运算、nameofdefault(默认值)、await/async
运算符重载 public static Point operator +(Point p1, Point p2) {}
隐式转换 public static implicit operator int(Point p1){}
显示转换 public static explicit operator string(Point p){}


02、运算符汇总🔣

2.1、算数运算

运算符 描述 示例
+ 加,字符串加为字符串连接,推荐字符内插$"{var}"
- 减,同+可用于委托,也可表示负数-100
*
/
% 取余数 6%3; //=0
++ 自加1,符号在前面的先运算,再赋值,在后面的反之 x=++y; //y=1+y; x=y;
x=y++; //x=y; y=1+y;
自减1,同上

  • 整数除以0会引发 DivideByZeroException,浮点数不会,结果为无穷∞/Infinity
  • 整数运算超出范围,默认情况下不会引发异常,会被自动截断(循环),除非使用检查语句(checked),此时超出范围会引发OverflowException。而常量表达式默认检查。
  • 浮点数floatdouble不会出现超出范围异常问题。
  • decimal 类型溢出始终会已发异常 OverflowException,被零除总是引发 DivideByZeroException
  • 整数除以整数,结果依然是整数,向下(截断)取整。
int a = 3;
int b = a +int.MaxValue; //-2147483646
int c = checked(a + int.MaxValue);  //System.OverflowException

2.2、赋值运算

运算符 描述 示例/备注
= 赋值运算符,一个神圣的仪式
+= 加法赋值 x+=y //x=x+y
-= 减法赋值 x-=y //x=x-y
*= 乘法赋值 x*=y //x=x*y
/= 除法赋值 x/=y //x=x/y
%= 取余赋值 a%=3 //a=a%3
op= 复合赋值x op = y = x = x op y 上面这些都是复合赋值
= ref 按引用赋值,可看做是别名,是同一个地址的别名 ref int b = ref a;
??
??=
Null 合并赋值,为null时就用后面的表达式值。
??=可用来设置默认值,或为null时抛出异常
c = b1 ?? 5; name??= "sam";
_= sender ??throw...

2.3、比较运算

运算符 描述 示例/备注
== 相等比较,值类型比较值,应用类型比较地址 if(x == 0){}
!= !=不等于比较,与==对应 if(x != 1){}
>,< 大于,小于
>=,<= 大于等于,小于等于

🔸对于相等(==、!=)比较

  • 值类型比较的是数据值是否相等。
  • 引用类型==比较的是其引用地址(对象),同 Object.ReferenceEquals
  • 字符串比较的字符串值,虽然他是引用类型(一个特殊的引用类型)。
  • 用户定义的 struct 类型默认情况下不支持 == 运算符,需要自己重载运算符。可以用Equals()方法,会box装箱。
  • C# 9.0 中的值类型 记录类型 record struct 支持 == 和 != 运算符,比较的是其内部值。这是因为record 内部实现了相等的运算符重载,比较了每个属性的值。
  • 委托,如果其内部列表长度相同,且每个位置的元素相同则二者相等。

🔸对于大小比较

  • char 比较的是字符码值。

2.4、逻辑运算符

运算符 描述 示例/备注
! !逻辑非运算符,取反,颠掉黑白! !false //true
& 逻辑与,都为true结果为true,都会计算,前面false还是会计算后面的 true & false //false
^ 逻辑异或,不同则为ture,相同false true ^ false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值