我有一段简单的代码没有达到我的预期。这段代码有什么问题?
int value1 = (int).5*100;
这很容易,但通过我循环了一段时间。当然,答案是微不足道的,并且是众所周知的。但是,我认为有人考虑可能会很有趣。
第一个提出正确解决方案并解释原因的人将获得学分。
我有一段简单的代码没有达到我的预期。这段代码有什么问题?
int value1 = (int).5*100;
这很容易,但通过我循环了一段时间。当然,答案是微不足道的,并且是众所周知的。但是,我认为有人考虑可能会很有趣。
第一个提出正确解决方案并解释原因的人将获得学分。
“什么是错的”:括号的使用不足,迫使我记住和背诵愚蠢的优先规则(旨在满足编译器,而不是人眼),使其难以编写,更难以维护。
如果含义有一点疑问,请添加括号。即使他们不需要。那么这不是问题。而且你不必记住任何东西!
如果代码写成:
((int)0.5)*100
或者:
(int)(0.5*100)
然后我怀疑这个问题是否有必要:)
首先它转换.5
为int
,结果为0
,然后将其乘以100
结果为 (0 * 100) 0
。
如果您期望它是,50
那么您需要使用括号(所以先乘法,然后键入 cast):
int value1 = (int)(.5*100);
多加括号总比少加括号好,它没有任何成本,而且增加了可读性和理解力。
MSDN 库:运算符优先级和关联性。
它与强制转换的优先级有关,强制转换具有更高的优先级,因此 i 在乘法运算之前执行,您必须使用括号来更改优先级,请尝试以下方式:
int value1 = (int)(.5 * 100);