C# 表达式和运算符(求值顺序)

求值顺序

表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生

变化。

例如,已知表达式3*5+2,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。

  • 如果乘法先执行,结果是17。
  • 如果5和2首先相加,结果为21。

优先级

我们小学时就知道,在前面的示例中,乘法必须在加法之前执行,因为乘法比加法有更高的

优先级。读小学的时候有4个运算符和两个优先级级别,但C#中情况更复杂一些,它有超过45

个运算符和14个优先级级别。

全部的运算符和它们的优先级如表9-4所示。该表把最高优先级运算符列在顶端,之后优先

级持续下降,底端运算符优先级最低。

结合性

假设编译器正在计算一个表达式,且该表达式中所有运算符都有不同的优先级,那么编译器

将计算每个子表达式,从级别最高的开始,按优先等级从高到低一直计算下去。

但如果两个连续的运算符有相同的优先级别怎么办?例如,已知表达式2/6*4,有两个可能

的求值顺序:

复制代码
(2/6)*4=4/3
或
2/(6*4)=1/12

当连续的运算符有相同的优先级时,求值顺序由操作结合性决定。也就是说,已知两个相同

优先级的运算符,依照运算符的结合性,其中的一个或另一个优先。运算符结合性的一些重要特

征如下所示,另外,表9-5对此做了总结。

  • 左结合运算符从左至右求值。
  • 右结合运算符从右至左求值。
  • 除赋值运算符以外,其他二元运算符是左结合的。
  • 赋值运算符和条件运算符是右结合的。
    因此,已知这些规则,前面的示例表达式应该从左至右分组为(2/6)*4,得到4/3。

可以使用圆括号显式地设定子表达式的求值顺序。括号内的子表达式:

  • 覆盖优先级和结合性规则;
  • 求值顺序从嵌套的最内层到最外层。

简单算术运算符

简单算术运算符执行基本四则算术运算,如表9-6所示。这些运算符是二元左结合运算符。

算术运算符在所有预定义简单数学类型上执行标准的算术运算。

相关推荐
凯丨8 小时前
AI 蠕虫来了:恶意文档如何通过 Copilot for Word 自我传播?
人工智能·c#·copilot
Aaron - Wistron9 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
骊城英雄11 小时前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#
吾儿良辰11 小时前
一个被BCL遗忘的高性能集合:C# CircularBuffer<T>深度解析
开发语言·windows·c#
哎呦喂我去去去11 小时前
C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS)
linux·windows·c#
caishenzhibiao12 小时前
期货先行者主图 同花顺期货通指标
java·c语言·c#
库拉库拉里12 小时前
Word文档的标题总是自动出现首行缩进怎么办?
c#·word·xhtml
在世修行12 小时前
从零打造 C# 工业视觉检测系统(一):项目全景与架构设计
c#·视觉检测
牡丹雅忻114 小时前
AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
java·开发语言·c#
脚踏实地皮皮晨14 小时前
002002002_DepandencyObject类2
开发语言·windows·算法·c#·visual studio