操作顺序简单的脑筋急转弯

Cur*_*ite -5 c# operator-precedence

我有一段简单的代码,没有达到我的预期.这段代码有什么问题?

int value1 = (int).5*100;
Run Code Online (Sandbox Code Playgroud)

这很容易,但通过我循环好一刻.当然,答案是微不足道的,已经知道了.但是,我认为有人思考可能会很有趣.

信用将给予第一个提出正确解决方案并解释原因的人.

Mar*_*ell 16

"有什么不对":括号的使用不足,迫使我背诵和背诵愚蠢的优先规则(这些规则旨在满足编译器,而不是人眼),使得难以编写甚至更难维护.

如果含义有点疑问,请添加括号.即使他们不需要.那么这不是问题.而且你不必记住任何东西!

如果代码写成:

((int)0.5)*100
Run Code Online (Sandbox Code Playgroud)

要么:

(int)(0.5*100)
Run Code Online (Sandbox Code Playgroud)

然后我怀疑这个问题是否必要:)

  • +1表示"旨在满足编译器,而不是人眼".在阅读某人的代码时,我从不想考虑优先规则.****永远. (4认同)

Zbi*_*iew 10

Firsty它投射.5int,导致0,然后它乘以它100导致(0*100)0.

如果你希望它是50那么你需要使用括号(所以乘法首先,然后输入):

int value1 = (int)(.5*100);
Run Code Online (Sandbox Code Playgroud)

放置更多括号而不是更少的括号总是更好,它没有任何成本,它增加了可读性和理解.

MSDN Library:运算符优先级和关联性.