表达式的优先级,包括括号和Java中的int

时间:2019-03-29 22:46:26

标签: java casting parentheses

我的代码中有以下表达式

  

int n =((int)Math.sqrt(4 * 4 + 5)-1)/ 2;

有人可以告诉我表达式的优先级吗?

逻辑上,我将通过以下方式评估表达式:

  1. 4 * 4 + 5 = 16 + 5 = 21

  2. Math.sqrt(21)〜4.58

  3. 4.58-1 = 3.58

  4. (int)3.58 = 3

  5. 3/2 = 1.5

但是代码的评估结果为1。

2 个答案:

答案 0 :(得分:3)

您几乎明白了。唯一的区别(与结果无关紧要)是对转换进行了评估 在减法之前,并且您正在使用整数除法:

  1. 4 * 4 + 5 = 16 + 5 = 21
  2. Math.sqrt(21)〜4.58
  3. (int)4.58 = 4(先播)
  4. 4-1-3 =
  5. 3/2 = 1(integer division

答案 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()的要求进行操作,而第二个操作则没有。