我的代码中有以下表达式
int n =((int)Math.sqrt(4 * 4 + 5)-1)/ 2;
有人可以告诉我表达式的优先级吗?
逻辑上,我将通过以下方式评估表达式:
4 * 4 + 5 = 16 + 5 = 21
Math.sqrt(21)〜4.58
4.58-1 = 3.58
(int)3.58 = 3
3/2 = 1.5
但是代码的评估结果为1。
答案 0 :(得分:3)
您几乎明白了。唯一的区别(与结果无关紧要)是对转换进行了评估 在减法之前,并且您正在使用整数除法:
答案 1 :(得分:-1)
您建议的顺序正确。
关键点是最后一个操作:int
除以int
的结果也是int
。
要解决此问题,两个数字之一应为float
(或double
):
float n = ((float)(int) (Math.sqrt(4 * 4 + 5) - 1)) / 2;
通过这种方式,将float
除以int
,结果将为float
。
或更好:
double n = (Math.sqrt(4 * 4 + 5) - 1) / 2;
因为将Math.sqrt()
的int强制转换为无效。
请注意,第一个操作完全按照您对Math.sqrt()的要求进行操作,而第二个操作则没有。