请教一个运算符优先级的问题,谢谢!
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));