日期:2014-05-19  浏览次数:20777 次

请教一个运算符优先级的问题,谢谢!
result   +=   var1   *   var2   +   var3   %   var4   /   var5   ;
请问运算顺序是怎么样呢?

答案说是:
result   +=   (((var1   *   var2)   +   var3)   %   (var4   /   var5))   ;

可是我怎么觉得是:

result   +=   ((var1   *   var2)   +(   var3   %   (var4   /   var5)))   ;

不知道我错哪里了?谢谢高人指点!



------解决方案--------------------
和楼上有同感
------解决方案--------------------
多余的觉得,运行一下嘛
------解决方案--------------------
事实上是result += var1 * var2 + (var3 % var4) / var5 ……
------解决方案--------------------
* / % 都是乘法运算符,他们之间按照从左到右的顺序。

附MSDN:
当表达式中出现两个具有相同优先级的运算符时,它们根据结合性进行计算。左结合运算符按从左到右的顺序计算。例如,x * y / z 计算为 (x * y) / z。右结合运算符按从右到左的顺序计算。赋值运算符和三元运算符 (?:) 是右结合运算符。其他所有二元运算符都是左结合运算符。
------解决方案--------------------
两个都不对,请参考:

<C# Language Specification>

The following table summarizes all operators in order of precedence from highest to lowest:
Section Category Operators
14.5 Primary x.y f(x) a[x] x++ x-- new typeof checked unchecked
14.6 Unary + - ! ~ ++x --x (T)x
14.7 Multiplicative * / %
14.7 Additive + -
14.8 Shift < < > >
14.9 Relational and type-testing < > <= > = is as
14.9 Equality == !=
14.10 Logical AND &
14.10 Logical XOR ^
14.10 Logical OR |
14.11 Conditional AND &&
14.11 Conditional OR ||
14.12 Conditional ?:
14.13 Assignment = *= /= %= += -= < <= > > = &= ^= |=

应该是
result += ((var1 * var2) + ( (var3 % var4) / var5));