第1个回答 2009-06-24
不同编译器产生的结果,q值是不同的。主要有22,24两种。
22时的执行步骤:
1.先对两个相加的数进行处理,++j,++j,即得j=7
2.将两个j相加,得到14
3.14+(++j),先将++j,得到j=8
4.14+8=22
24时的执行步骤:
先将三个操作数都进行处理,即得j=8
再执行加指令,将三个数加在一起,得到24
哈哈,汇编语言的知识发挥作用了。
多赏点分哦!!!
第2个回答 2009-06-24
i++,见到就加1
++j,见到就加1
但是在同一行用多个++j会引起歧义,不同版本的编译器会给出不同的答案。
比如在我的电脑上输出是15,24,8,8。
对于您的情况,在编译器读
q=(++j)+(++j)+(++j);时,
最后一个++j先被计算,此时j=6(我们叫它jj好了);
然后是中间那个,此时j=7(我们叫它jjj);
最后是第一个++j,此时j=8(jjjj);
但是由于编译解释的缘故,我的电脑认为q=jjjj+jjjj+jjjj=8+8+8=24;
你的电脑认为q=jjjj+jjjj+jj=8+8+6=22;
第3个回答 2009-06-24
q=(++j)+(++j)+(++j);相当于q=((++j)+(++j))+(++j);注意看我加的括号了吧。
先运算((++j)+(++j))的值(这里是一个表达式,所以先求解所有的++j,知道j在这部分最终为7),即(7+7)=14,然后再加上(++j),而此时这部分表达式返回8,所以14+8=22
不同的编译器解释不一样,我上面说的是VC++6本回答被提问者采纳
第4个回答 2009-06-24
ls的正解,这个和编译器有关,用java的编译器或者gcc等又会得到不同的结果。lz还是不要在这种题目上过多费神吧,如果我遇到这种题目,我就一句话:跟编译器有关,答案不确定。