运算符及易错场景

        在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。

C#运算符说明

参考百度百科

优先级运算符名称或含义使用形式结合方向说明
1[]数组下标数组名[整型表达式]左到右 
()圆括号(表达式)/函数名(形参表) 
.成员选择(对象)对象.成员名 
->成员选择(指针)对象指针->成员名 
2-负号运算符-表达式右到左单目运算符
(type)强制类型转换(数据类型)表达式 
++(前缀)自增运算符++变量名单目运算符
--(前缀)自减运算符--变量名单目运算符
*取值运算符*指针表达式单目运算符
&取地址运算符&左值表达式单目运算符
!逻辑非运算符!表达式单目运算符
~按位取反运算符~表达式单目运算符
sizeof长度运算符sizeof表达式/sizeof(类型) 
3/表达式/表达式左到右双目运算符
*表达式*表达式双目运算符
%余数(取模)整型表达式%整型表达式双目运算符
4+表达式+表达式左到右双目运算符
-表达式-表达式双目运算符
5<<左移表达式<<表达式左到右双目运算符
>>右移表达式>>表达式双目运算符
6>大于表达式>表达式左到右双目运算符
>=大于等于表达式>=表达式双目运算符
<小于表达式<表达式双目运算符
<=小于等于表达式<=表达式双目运算符
7==等于表达式==表达式左到右双目运算符
!=不等于表达式!=表达式双目运算符
8&按位与整型表达式&整型表达式左到右双目运算符
9^按位异或整型表达式^整型表达式左到右双目运算符
10|按位或整型表达式|整型表达式左到右双目运算符
11&&逻辑与表达式&&表达式左到右双目运算符
12||逻辑或表达式||表达式左到右双目运算符
13?:条件运算符表达式1?表达式2:表达式3右到左三目运算符
14=赋值运算符变量=表达式右到左 
/=除后赋值变量/=表达式 
*=乘后赋值变量*=表达式 
%=取模后赋值变量%=表达式 
+=加后赋值变量+=表达式 
-=减后赋值变量-=表达式 
<<=左移后赋值变量<<=表达式 
>>=右移后赋值变量>>=表达式 
&=按位与后赋值变量&=表达式 
^=按位异或后赋值变量^=表达式 
|=按位或后赋值变量|=表达式 
15++(后缀)自增运算符变量名++左到右单目运算符
--(后缀)自减运算符变量名--单目运算符
16,逗号运算符表达式,表达式,…左到右从左向右顺序运算

 

常用场景

下面举例说明常用场景中易犯的错误

1.++,-- 和赋值运算符

            int a = 3;
            int b = 0;
            int c = 0;
            b += ++a;    // => a=a+1;b=b+a;  //a=4,b=4
            c += b++;    // => c=c+b;b=b+1;   //c=4,b=5

2. 位移操作符与 或 | 和+

            ushort res1 = (ushort)(1 << 8 | 1);// 256+1=257
            ushort res2 = (ushort)((1 << 8) + 1);//256+1=257
            ushort res3 = (ushort)(1 << 8 + 1);//=> 1<<9 = 512

最恐怖的错误是这样

            UInt32 res1 = (UInt32)(1 << 24 | 1 << 16 | 1 << 8 | 1);//0x01010101=16,843,009
            UInt32 res2 = (UInt32)(1 << 24 + 1 << 16 + 1 << 8 + 1);//=?????极其致命的错误,而且很容易犯。结果为0。

3.&、| 和&&、||

比较常用。实际区别为‘|’和‘||’,区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断。

直观总结

优先级

类别

运算符

1

基本

(x) x.y f(x) a[x] x++ x-- new typeof sizeof checked unchecked

2

单目

+ - ! ~ ++x --x (T)x

3

乘法与除法

* / %

4

加法与减法

+ -

5

移位运算

<< >>

6

关系运算

< > <= >=

7

条件等

== !=

8

位逻辑与

&

9

位逻辑异或

^

10

位逻辑或

|

11

条件与

&&

12

条件或

13

条件

?:

14

赋值

=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值