您现在的位置是:首页 > 开发教程

开发教程

C#中基础运算操作与规则

2020-11-21 11:27:09 开发教程 admin
2.5.3控制优先级优先级(precedence)控制着一个表达式中的各个操作符的求值顺序。例如以下表达式,它使用了操作符+和*:2+3*4如果没有优先级规则,该表达式就可能造成歧义。是先加还是先乘?换言之,3是绑定到它左边的操作符+,还是
2.5.3控制优先级
优先级(precedence)控制着一个表达式中的各个操作符的求值顺序。例如以下表达式,它使用了操作符+和*:
2+3*4
如果没有优先级规则,该表达式就可能造成歧义。是先加还是先乘?换言之,3是绑定到它左边的操作符+,还是绑定到右边的操作符*?不同的求值顺序会造成不同的结果。
●如果先加后乘,那么加法运算(2+3)的结果将成为操作符*的左操作数,所以整个表达式的结果是5*4,即20。
●假如先乘后加,那么乘法运算(3*4)的结果将成为操作符+的右操作数,所以整个表达式的结果是2+12,即14。

在C#中,multiplicative操作符(*,/和%)的优先级高于additive操作符(+和-)。所以,2+3*4的结果是14。以后讨论每一种新的操作符时,我们都会指出它的优先级。
可以使用圆括号来覆盖优先级规则,强制操作数按你希望的任何方式绑定到操作符。例如在以下表达式中,圆括号强迫2和3绑定到操作符+(得5),再使结果成为操作符*的左操作数,最终的结果值是20:
(2+3)*4
注意:本书所说的圆括号指的是();大括号或花括号指的是{};方括号指的是[]。

操作符优先级只能解决部分问题。假如一个表达式中的多个操作符具有相同的优先级,又该怎么办呢?这时就要用到结合性的概念。结合性(associativity)是指操作数的求值方向(向左或向右)。例如,以下表达式同时使用了操作符/和*:
4/2*6

该表达式仍有可能造成歧义。是先除,还是先乘?两个操作符的优先级是相同的(都是multiplicative操作符),但这个表达式的求值顺序至关重要,因为可能获得以下两个不同的结果。
●如果先除,除法运算(4/2)的结果将成为操作符*的左操作数,整个表达式的结果是(4/2)*6,即12。
●如果先乘,那么乘法运算的结果(2*6)将成为操作符/的右操作数,整个表达式的结果是4/(2*6),即4/12。

在这种情况下,操作符的结合性决定着表达式的计算方式。由于操作符*和/具有相同的优先级,所以不能根据优先级来确定2绑定到*还是/。然而,决定操作符求值顺序的除了优先级之外,还有结合性。操作符*和/都具有左结合性;换言之,操作数是从左向右求值的。在本例中,4/2将在乘以6之前求值,所以正确结果是12。以后讨论每一种新的操作符时,我们都会指出它的结合性。

2.5.5结合性和赋值操作符
在C#语言中,等号(=)称为赋值操作符。所有操作符都依据它们的操作数来返回一个值。赋值操作符(=)也不例外。它取两个操作数;右侧的操作数被求值,结果保存在左侧的操作数中。赋值操作符返回的值就是赋给左操作数的值。例如,在以下赋值语句中,赋值操作符返回的值是10,它也是赋给变量myInt的值。
intmyInt;
myInt=10;//赋值表达式的值是10