C#中38个常用运算符的优先级的划分和理解

时间:2022-09-23 17:12:44 

在C#中,一共有38个常用的运用符,根据它们所执行运算的特点和它们的优先级,为了便于记忆,我将它们归为七个等级:1、单元运算符和括号。2、常规算术运算符。3、位移运算符。4、比较运算符。5、逻辑运算符。6、各种赋值运算符。7、右位(后缀)单元运算符。

1、在这一级中,有++、--(做为前缀)、()、+、-(做为单元运算符)、!、~。这一级中都是单元运算符,除了其中那一对特殊的具有改变任何运算优先级的括号。这此可以看出,在定义表达式中,那些单元运算符的优先级是很高的,可能是因为它们都直接作用于操作数吧。只有两个单元运算符的优先级不在第一级中,它们因为特殊的原因出现在了后面。

2、在常规算术运算符中,有我们经常使用的*、/、%、+、-,因为他们使用得较多,所以也排在较高的位置。

3、这一级是两个特殊的位操作符,<< 和 >>,它们是所有二元操作符中除常规运算符外优先级最高的了,可能是因为与比较运算符、逻辑运算符比起来,这一组操作符进行的还是数值的计算。

4、比较运算符,包括<、>、<=、>=、==、!=,一共六个,这里有一个特点,就小于优先于大于。

5、逻辑运算符,逻辑运算符原本有四种,但用于单元的“非”运算符排在了前面,所以这里面就只有&、^、|,再加上两个补充的用于提高代码效率的运算符&&、||,共有五个。

6、赋值运算符,这一级最多,几乎前面出现过的二元运算符,在这里加上个“=”号就成为一个赋值运算符。首先当然最基本的赋值运算符“=”;然后是常规算术运算符演变来的“*=、/=、%=、+=、-=”,它们的顺序和常规算术符的顺序一样;然后是位移运算符和逻辑运算符,也按它们演变前的顺序排列,为“<<=、>>=、&=、^=、|=”。因为比较运算符所产生的结果的数据类型和它的运算数的数据类型不同,所以它们没有相应的赋值运算符。

7、最后一级,就是那两个最后的单元运算符后缀版的++、--。它们的出现就是为了做为那两个前缀版的==、--的补充(那两个的优先级太高了,人们需要两个优先级不那么高的),以方便设计表达式,所以这两个的优先级当然要排在最后了。

那么,这38个操作符的优先级顺序就可以写成如下了:(无论是横向还是竖向,越靠前优先级越高)
第一级:++、--(做为前缀)、()、+、-(做为单元运算符时)、!、~。
第二级:*、/、%、+、-。
第 * :<<、>>。
第四级:<、>、<=、>=、==、!=。
第五级:&、^、|、&&、||。
第六级:=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=、|=。
第七级:++、--(做为后缀)。

这只我自己在学C#中的一些总结,其中对于各级的划分方式、各操作符的优先级的理解并不见得正确,只是自己的看法,拿出来与大家分享。

标签:运算符,优先级
0
投稿

猜你喜欢

  • Java基于HttpClient实现RPC的示例

    2023-10-29 15:55:02
  • Java使用ArrayList实现扑克牌的示例代码

    2021-10-29 15:17:17
  • Java有趣好玩的图形界面开发八个案例实现

    2022-12-20 06:20:35
  • MybatisPlus #{param}和${param}的用法详解

    2023-02-02 13:08:10
  • IntelliJ IDEA 安装目录的核心文件的功能及用法

    2023-02-02 10:46:59
  • Spring Boot 2.7.6整合redis与低版本的区别

    2023-11-11 19:44:56
  • 深入浅析java中flyway使用简介

    2022-06-05 20:45:45
  • 详解xamarin Android 实现ListView万能适配器

    2022-11-26 02:12:33
  • Java计时新姿势StopWatch的使用方法详解

    2022-01-28 00:49:57
  • Java线程同步、同步方法实例详解

    2023-10-16 07:10:53
  • Unity解析gif动态图操作

    2022-05-27 08:16:43
  • Winform控件优化之圆角按钮1

    2021-05-31 20:15:36
  • Java多线程之ThreadLocal浅析

    2023-06-19 19:55:37
  • C#数据结构与算法揭秘三 链表

    2022-04-17 03:22:38
  • Swing拆分窗格控件JSplitPane使用详解

    2022-11-14 21:13:48
  • Flutter Zone异常处理方法及基本原理

    2021-11-25 23:30:30
  • Java读取并下载网络文件的方法

    2023-03-18 11:47:05
  • Android自定义View用切图显示字符串

    2023-03-13 07:14:58
  • Android 中Notification弹出通知实现代码

    2021-05-31 14:48:18
  • Unity实现滑动更换界面效果

    2021-10-06 19:56:40
  • asp之家 软件编程 m.aspxhome.com