5-(++i)+(++i)
会先处理5-(++i),得出结果后再计算(++i),最后算出5-(++i)+(++i)的结果。=============
我想知道为什么这么算,不是括号优先吗?为什么?

解决方案 »

  1.   

    我不是高手,我觉得应该是这样:比如说原来i=1;先计算前面一个(++i)得出结果为2
    再计算后面一个(++i)得出结果为3
    然后再计算5-2+3=6;
    这样解释没有违背括号优先的原则..也就是说等价于:
    int i=1;
    int a=++i;
    int b=++i;
    int c=5-a+b;
      

  2.   

    int i=1;
    (++i)先自增再引用
    (i++)先引用再自增
    5-(++i)+(++i) =6//知道为什么不? 嘿嘿
    (5-(i++)+(i++))==5-(++i)+(++i); //2个相等
    5-(i++)+(++i)=7;//
    5-(++j)+(j++)=5;
      

  3.   

    int i=1;
    5-(++i)+(++i)为什么=6 哈哈
    建议大家去读下内存 是不是和推想结果不一样捏 不要说高手不会这样写代码 貌似这是微软的面试题 哪看过 忘了
    5-(++i)=3 //i=2
    5-(++i)+(++i) //i=3
    (++i)+(++i)=5//i=3
      

  4.   

    liujia_0421(SnowLover) 已经解答了
      

  5.   

    困惑啊。
    如果括号优先成立,那么应该就是先算两个括号了。
    假设i=1,那么第一个括号算完i应该是2,接下来就应改算第二个括号了,然后得出i=3
    那么最后应该是5-3+3=5了。但是实际结果是6,那么我觉得,很有可能是在第一个(++i)得出结果以后编译器把结果赋给了一个匿名变量(假设为j),然后算第二个括号得出结果赋给另一个匿名变量(假设为K),那么最后的表达式就变成了 5-j+k ,其中j=2,k=3。期待高人。
      

  6.   

    TO:不好意思,i=0,忘说了i=0和i=1都一样..
      

  7.   

    TO:假设i=1,那么第一个括号算完i应该是2,接下来就应改算第二个括号了,然后得出i=3
    那么最后应该是5-3+3=5了。我觉得是这样,第一个括号得出2后会存于一个临时变量比如a中,另一个括号得出3后存于另一个临时变量比如b中...即
    a=2
    b=3
    c=5-2+3=6;
      

  8.   

    int k=1000;
    int b;
    b=5-(++k)+(++k);
    >> b=5-(1000+1)+(++k)
    >> b=5-(1000+1)+((1000+1)+1)
    >> b=5-1001+(1001+1)
    >> b=5-1001+1002
    >> b=(-996) + 1002
    >> b=6
    有什么问题吗?