-6

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

int value1 = (int).5*100;

这很容易,但通过我循环了一段时间。当然,答案是微不足道的,并且是众所周知的。但是,我认为有人考虑可能会很有趣。

第一个提出正确解决方案并解释原因的人将获得学分。

4

3 回答 3

16

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

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

如果代码写成:

((int)0.5)*100

或者:

(int)(0.5*100)

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

于 2012-07-22T09:43:16.897 回答
10

首先它转换.5int,结果为0,然后将其乘以100结果为 (0 * 100) 0

如果您期望它是,50那么您需要使用括号(所以先乘法,然后键入 cast):

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

多加括号总比少加括号好,它没有任何成本,而且增加了可读性和理解力。

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

于 2012-07-22T09:42:11.480 回答
3

它与强制转换的优先级有关,强制转换具有更高的优先级,因此 i 在乘法运算之前执行,您必须使用括号来更改优先级,请尝试以下方式:

int value1 = (int)(.5 * 100);
于 2012-07-22T09:43:47.687 回答