请问vc++6.0中 (++a)+(++a)+(++a)如何运算?

来源:百度知道 编辑:UC知道 时间:2024/06/03 03:33:24
例 a=1

很多人认为这到题目的答案是9,但是加上这到题目的答案是10,我们看一下
(++a)+(++a)+(++a)反汇编以后是什么样子,这是VC6给出的反汇编代码,其中的变量a我用[a]表示
00401036 mov eax,[a]
00401039 add eax,1
0040103C mov [a],eax;完成第一个++a,此时a=2
0040103F mov ecx,[a]
00401042 add ecx,1
00401045 mov [a],ecx;完成第二个++a,此时a=3
00401048 mov edx,[a]
0040104B add edx,[a];完成(++a)+(++a),此时结果是3+3=6
0040104E mov eax,[a]
00401051 add eax,1
00401054 mov [a],eax;完成第三个++a,此时a=4
00401057 add edx,[a];完成[(++a)+(++a)]+(++a),此时结果是6+4=10
0040105A mov [result],edx

所以你其实可以这样理解:
第一步 (++a)+(++a)这一步要完成2次++a后a=3,然后将结果相加3+3=6,第一步的结果是6
第二步 6+(++a)这一步先完成一次++a后a=4,然后预算6+4,得到最后结果10

所以总结得到++前置的运算优先级…局部…大于+,请注意那个局部

5分太少了,要求加分啊

(++a)+(++a)+(++a)
(2)+(3)+(4)
是这样吧,++a先自加再用,a++先用后自加

(++a)是前+,意思是在 确定A值之前就把A按没个+号默认+1的算法,所以在开始算的时候就会出现 第1个(++