int=5 x*=x/=x+x

笔算结果0.25,cmd编译后输出结果为2.5,笔算中哪里出现了问题

img

img

img

【答案】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);
   }

img

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);