读书人

请教一个运算符优先级的有关问题,多谢

发布时间: 2011-12-26 23:09:58 作者: rapoo

请教一个运算符优先级的问题,谢谢!
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:
SectionCategoryOperators
14.5Primaryx.y f(x) a[x] x++ x-- new typeof checked unchecked
14.6Unary + - ! ~ ++x --x (T)x
14.7Multiplicative* / %
14.7Additive+ -
14.8Shift < < > >
14.9Relational and type-testing < > <= > = is as
14.9Equality== !=
14.10Logical AND&
14.10Logical XOR^
14.10Logical OR|
14.11 Conditional AND&&
14.11 Conditional OR||
14.12 Conditional?:
14.13 Assignment= *= /= %= += -= < <= > > = &= ^= |=

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

读书人网 >C#

热点推荐