int i=5;
printf("%d\n",(i++)+(++i)+(--i)+(i--)-(i++));为什么输出的是17而不是16?printf("%d\n",(++i)+(--i)+(i++)+(i--)-(i++));而这一次是15?请高手详细分析一下运算过程

解决方案 »

  1.   

    经常在大学课考试见到类似的题目,实际上是将学生带入一个误区,实际编程中不要采用这样的写法。
    运算的结果和编译器的实现有关系;
    在C语言中(GCC编译器),先从左到右,计算++i,--i,然后再从左到右计算i++,i--,并最终取得结果;但在javascript中,虽然具有相同的语法,但却完全从左到右计算,而不把++i,--i看做具有更高的优先级。如果采用其他C语言风格编译器,恐怕还会得出更多结果。
      

  2.   

    to wabc(wabc):
    谢谢指点,如果在表达式里有同时有++i和--i,是如何计算的?
      

  3.   

    前面不是说了吗?在C语言中,先从左到右,把++i,--i单独拿出来计算,然后在从左到右计算其他。
      

  4.   

    楼上的好象说错了吧,++i和i++优先级同是15,之所以会产生不同,是因为它们的运算规则不同,++i是先运算赋值再调用,而++i是先调用再运算赋值,--i也一样。