鱼C论坛

 找回密码
 立即注册
查看: 5786|回复: 2

[已解决]求助++问题,为毛会这样

[复制链接]
发表于 2013-11-11 22:08:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
q=5,q=(++j)+(++j)+(++j)    我觉得应该是6+7+8=21但是编译器的结果却是6+8+8=22求大神解释,我用的是vc++6.0
最佳答案
2013-11-11 22:18:22
这是vc++6.0的编译器搞的鬼(ps:可能有的编译器,编译结果并不一样。),它编译的时候逻辑是先把前两个进1,然后运算完之后,在把第三个进1.也就是:
q=5,
q=(++j)+(++j)+(++j)
编译器先运算前两个(++j)+(++j)。赋值为7+7;
然后在将最后一个(++j)赋值为8;
最后结果就等于   q=7+7+8=22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-11 22:18:22 | 显示全部楼层    本楼为最佳答案   
这是vc++6.0的编译器搞的鬼(ps:可能有的编译器,编译结果并不一样。),它编译的时候逻辑是先把前两个进1,然后运算完之后,在把第三个进1.也就是:
q=5,
q=(++j)+(++j)+(++j)
编译器先运算前两个(++j)+(++j)。赋值为7+7;
然后在将最后一个(++j)赋值为8;
最后结果就等于   q=7+7+8=22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-12 22:42:42 | 显示全部楼层
8:     q=(++j)+(++j)+(++j);
0040D75F   mov         eax,dword ptr [ebp-8]
0040D762   add         eax,1
0040D765   mov         dword ptr [ebp-8],eax
0040D768   mov         ecx,dword ptr [ebp-8]
0040D76B   add         ecx,1
0040D76E   mov         dword ptr [ebp-8],ecx
0040D771   mov         edx,dword ptr [ebp-8]
0040D774   add         edx,dword ptr [ebp-8]
0040D777   mov         eax,dword ptr [ebp-8]
0040D77A   add         eax,1
0040D77D   mov         dword ptr [ebp-8],eax
0040D780   add         edx,dword ptr [ebp-8]
0040D783   mov         dword ptr [ebp-4],edx
仔细看下汇编代码吧   ,跟楼上说的是正确的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 22:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表