笔算结果0.25,cmd编译后输出结果为2.5,笔算中哪里出现了问题
【答案】2.5
【解析】
赋值运算符的优先级问题,从右到左 计算
x*=x/=x+x;
x = x*(x/(x+x)) = 5*5/(5+5) = 2.5
public static void main(String[] args) {
double x = 5;
x*=x/=x+x;
System.out.println("x = " + x);
}
package com.csdn;
public class Solution {
public static void main(String[] args) {
double x = 5;
// double r = x *= x /= x + x;
// +号的运算符优先级为2,结合性:从右向左
// *=和/=的运算符优先级为14,结合性:从右向左
// 优先级越高,越先参与计算
// 上面的表达式等价于下面
// 第1步:计算x+x
// double r1 = x *= x /= 10;
// System.out.println(r1);
// 第2步:计算x/=10,此时x=5
// double r2 = x *= 0.5;
// System.out.println(r2);
// 第三步:计算x*=0.5
double r3 = x = x * 0.5;
System.out.println(r3);
}
}
java运算符先后问题
首先你要明白一点,java中的 等于号为赋值或引用操作,
x*=x/=x+x;
所以计算顺序 是将(x/=x+x)的结果赋值给x*=,
而x/=x+x的计算顺序是 将x+x的结果赋值给x/=,
一层一层的来计算
5/=(5+5)------>结果为0.5
5*=0.5 结果为 2.5
再怎么加括号也得不到0.25呀
优化之后的运算代码----
x*= x / (x + x);