请看精华区的帖子:a=b+(b=a)*0是如何编译PS:居然精华区的帖子还是个无满意答案的。

解决方案 »

  1.   

    a = b + (b = a) * 0; 
    a等于b,然后加上0,中间赋值b等于a,好像是这样
      

  2.   

    相当于执行了两个交换过程:a=b, b=a
    编译器也应该是从左到右运算的好像有一个运算栈来负责存储中间运算过程
      

  3.   

    同时再问问:
    (1)short s1 = 1; s1 = s1 + 1;
    (2)short s1 = 1; s1 += 1;
    上边(1)有错我知道,但为什么(2)没错呢?
      

  4.   

    估计是+=的原因,这东西连string都支持,应该是自动转换了类型吧
      

  5.   

    终于知道了,原来为自己能想出一个答案而高兴呢。现在没了,我当初的答案是。
    int a = 10; 
    int b = 12; 
    a= a + b;b = a - b;a= a - b;
      

  6.   


    这个问题经常碰到
    s1=s1+1出错时因为右边已经是int型,不能隐式转换成short
    s1+=1正确是因为short型重载了+=运算符
      

  7.   

    要了解符号运算的优先级。
    1、计算(b=a),得b=10
    2、计算(b=a)*0,得 0
    3、计算b + (b = a) * 0,得12
    4、计算a=b + (b = a) * 0,得10