int a=1 (++a)+(++a)+(++a)=?

时间:2022-03-24 16:23:12
int a=1
 (++a)+(++a)+(++a)=?

个人感觉这个答案应该是9,但是vc2005运行的结果却是12。
我是这么分析的:
首先执行括号里的内容,第一个括号内的++a返回2,同时a自增1,得到a的值为2;
第二个括号内的++a返回3,同时a自增1,得到a的值为3;
第三个括号内的++a返回4,同时a自增1,得到a的值为4;
这是得到了三个括号内返回值的加法算式:2+3+4,得到9。

有谁知道我的分析哪里有问题,请指教。谢谢。

8 个解决方案

#1


这个你得看看汇编就明白了 :)


    int a=1;
00401936  mov         dword ptr [a],1 
    int n = (++a)+(++a)+(++a);
0040193D  mov         eax,dword ptr [a] 
00401940  add         eax,1 
00401943  mov         dword ptr [a],eax 
00401946  mov         ecx,dword ptr [a] 
00401949  add         ecx,1 
0040194C  mov         dword ptr [a],ecx 
0040194F  mov         edx,dword ptr [a] 
00401952  add         edx,1 
00401955  mov         dword ptr [a],edx 
00401958  mov         eax,dword ptr [a] 
0040195B  add         eax,dword ptr [a] 
0040195E  add         eax,dword ptr [a] 
00401961  mov         dword ptr [n],eax 



看到没,先++,再算和

#2


这么写,没人会请你的……

#3


我运行的结果是10.。。。

#4


谢谢1L,我明白ms的处理方式了。

re 2L,这个只能作为实验代码,真正做项目肯定不会写这种模糊的代码。

#5


3L,你的运行环境是什么?

#6


Dev-C++ Borland公司的

#7


看不懂

#8


应该是编译器对这个运算符的处理方式不一样造成的。结帖

#1


这个你得看看汇编就明白了 :)


    int a=1;
00401936  mov         dword ptr [a],1 
    int n = (++a)+(++a)+(++a);
0040193D  mov         eax,dword ptr [a] 
00401940  add         eax,1 
00401943  mov         dword ptr [a],eax 
00401946  mov         ecx,dword ptr [a] 
00401949  add         ecx,1 
0040194C  mov         dword ptr [a],ecx 
0040194F  mov         edx,dword ptr [a] 
00401952  add         edx,1 
00401955  mov         dword ptr [a],edx 
00401958  mov         eax,dword ptr [a] 
0040195B  add         eax,dword ptr [a] 
0040195E  add         eax,dword ptr [a] 
00401961  mov         dword ptr [n],eax 



看到没,先++,再算和

#2


这么写,没人会请你的……

#3


我运行的结果是10.。。。

#4


谢谢1L,我明白ms的处理方式了。

re 2L,这个只能作为实验代码,真正做项目肯定不会写这种模糊的代码。

#5


3L,你的运行环境是什么?

#6


Dev-C++ Borland公司的

#7


看不懂

#8


应该是编译器对这个运算符的处理方式不一样造成的。结帖