我有一段简单的代码,没有达到我的预期。这段代码有什么问题?
int value1 = (int).5*100;
这很容易,但通过我循环好一刻。当然,答案是微不足道的,已经知道了。但是,我认为有人思考可能会很有趣。
将给予第一个提出正确解决方案并解释原因的人。
答案 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);