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

时间:2012-07-22 09:39:26

标签: c# operator-precedence

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

int value1 = (int).5*100;

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

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

3 个答案:

答案 0 :(得分:16)

“出了什么问题”:括号的使用不足,迫使我记住并背诵愚蠢的优先规则(旨在满足编译器,而不是人眼),使其难以编写,甚至难以维护。

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

如果代码写成:

((int)0.5)*100

或:

(int)(0.5*100)

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

答案 1 :(得分:10)

第五次将.5转换为int,结果为0,然后将其乘以100,结果为(0 * 100)0

如果您希望它是50,那么您需要使用括号(因此乘法先行,然后输入):

int value1 = (int)(.5*100);

总是把括号括起来然后更少,不花钱,增加可读性和理解。

MSDN Library:Operator precedence and associativity

答案 2 :(得分:3)

它与强制转换的优先级有关,强制转换具有更高的优先级,所以我在乘法运算之前执行,你必须使用括号来改变优先级,试试这样:

int value1 = (int)(.5 * 100);