日期:2014-05-20  浏览次数:20719 次

这个程序计算出来是多少,求执行步骤详解
           
public static void main(String[] args) {
int x=1;
int y=2;
int z=3;
int c=y+=z--/++x-x;
System.out.println(c);
}

------最佳解决方案--------------------
不是很复杂,大致计算步骤如下:
int c = y += z-- / ++x - x; // 原表达式
int c = y += 3 / ++x - x; // 这里 z-- 是延后计算
int c = y += 3 / 2 - x; // 这里 ++x 是提前计算
int c = y += 1 - 2; // 除法优先,此外int除法没有小数
int c = y += -1; // y += -1 其实就是:  y = y + -1
int c = y = 2 - 1;
int c = 1;
------其他解决方案--------------------
       //拆开后
        int c=y=y+z--/++x-x;
        //自己理解: 如有错误请斧正!
        //先Z/++后的x 结果等于1 然后自身减减等于0
        //然后y+0-x 结果就是2+0-1 结果就是1
------其他解决方案--------------------
先按照运算符的优先级拆分表达式:c=y+=z--/++x-x
1. 第一级别除法运算   z--/++x ,“/”优先级低于“--”故z自增后再除,x先自增在运算,故结果为 2/2 = 1;

2. 第一步后表达式为 c=y+=1 - x,因为x自增了1,即此时 x=2 故 1- x = 1 - 2 = -1;

3. 第二步后表达式为 c = y += -1, 即y += -1等价于 y = y + (-1) = 1;

4. 第三步后表达式为 c = 1,故输出结果为 1 
------其他解决方案--------------------
1L是对的。
2L:z最后的值为2,不是0.
3L: z参与计算时的值为3,不是2.
------其他解决方案--------------------
 编译一下 看看就知道了
------其他解决方案--------------------
引用:
1L是对的。
2L:z最后的值为2,不是0.
3L: z参与计算时的值为3,不是2.

3L: z参与计算时的值为3,不是2. ????
呵呵,讲讲z是如何成3的。   c=y+=z--/++x-x
------其他解决方案--------------------
引用:
引用:

1L是对的。
2L:z最后的值为2,不是0.
3L: z参与计算时的值为3,不是2.

3L: z参与计算时的值为3,不是2. ????
呵呵,讲讲z是如何成3的。   c=y+=z--/++x-x

哦,我看错了,z的初始值为3,我看成y了的初始值2了。