***C#运算符分类
1.算术运算符
2.关系运算符
3.逻辑运算符
4.位运算符
5.赋值运算符
6.其他运算符(new typeOf)
一、算术运算符
注意:
1.除运算的时候,除数不能等于0,但是浮点型数值除以0的时候会得到无穷;
2.对0取余的时候,结果为NuN (Not a Number)
c = a++: 先将 a 赋值给 c,再对 a 进行自增运算。
c = ++a: 先将 a 进行自增运算,再将 a 赋值给 c 。
c = a- -: 先将 a 赋值给 c,再对 a 进行自减运算。
c = - -a: 先将 a 进行自减运算,再将 a 赋值给 c 。
二、关系运算符
三、逻辑运算符
四、位运算符
五、其他运算符
双问号 ?? null合并运算符
定义getNum为null,输出结果为0
private int? getNum = null;
Console.WriteLine(getNum ?? 0);
用于定义可以为null 的变量的当变量为null时候的值,上面当getNum不为null的时候为其本身,如果为null则等于0
***运算符的优先级
一般七个等级划分:
1.单元运算符和括号。
2.常规算术运算符。
3.位移运算符。
4.比较运算符。
5.逻辑运算符。
6.各种赋值运算符。
7.右位(后缀)单元运算符。
详细说明:
1.在这一级中,有++、--(做为前缀)、()、+、-(做为单元运算符)、!、~。这一级中都是单元运算符,除了其中那一对特殊的具有改变任何运算优先级的括号。这此可以看出,在定义表达式中,那些单元运算符的优先级是很高的,可能是因为它们都直接作用于操作数吧。只有两个单元运算符的优先级不在第一级中,它们因为特殊的原因出现在了后面。
2.在常规算术运算符中,有我们经常使用的*、/、%、+、-,因为他们使用得较多,所以也排在较高的位置。
3.这一级是两个特殊的位操作符,<< 和 >>,它们是所有二元操作符中除常规运算符外优先级最高的了,可能是因为与比较运算符、逻辑运算符比起来,这一组操作符进行的还是数值的计算。
4.比较运算符,包括<、>、<=、>=、==、!=,一共六个,这里有一个特点,就小于优先于大于。
5.逻辑运算符,逻辑运算符原本有四种,但用于单元的“非”运算符排在了前面,所以这里面就只有&、^、|,再加上两个补充的用于提高代码效率的运算符&&、||等共有五个。
6.赋值运算符,这一级最多,几乎前面出现过的二元运算符,在这里加上个“=”号就成为一个赋值运算符。首先当然最基本的赋值运算符“=”;然后是常规算术运算符演变来的“*=、/=、%=、+=、-=”,它们的顺序和常规算术符的顺序一样;然后是位移运算符和逻辑运算符,也按它们演变前的顺序排列,为“<<=、>>=、&=、^=、|=”。因为比较运算符所产生的结果的数据类型和它的运算数的数据类型不同,所以它们没有相应的赋值运算符。
7.最后一级,就是那两个最后的单元运算符后缀版的++、--。它们的出现就是为了做为那两个前缀版的==、--的补充(那两个的优先级太高了,人们需要两个优先级不那么高的),以方便设计表达式,所以这两个的优先级当然要排在最后了。
即:
第一级:++、--(做为前缀)、()、+、-(做为单元运算符时)、!、~。
第二级:*、/、%、+、-。
第三级:<<、>>位移运算。
第四级:<、>、<=、>=、==、!=。(逻辑比较)
第五级:&、^、|、&&、||。
第六级:=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=、|=。
第七级:++、--(做为后缀)。