设i和j已经定义为int型,且i=3,执行j=(++i)+(++i)+(++i);语句后,为何在C语言中j=18,而在C++中j=16?

设i和j已经定义为int型,且i=3,执行j=(++i)+(++i)+(++i);语句后,为何在C语言中j=18,而在C++中j=16?后者是如何算的。还有下面的语句中答... 设i和j已经定义为int型,且i=3,执行j=(++i)+(++i)+(++i);语句后,为何在C语言中j=18,而在C++中j=16?后者是如何算的。还有下面的语句中答案也有不同,请帮忙解决。多谢了!!!
1.j=(i++)+(i++)+(++i);在C中j=12,而在C++中j=10。后者是如何算的,为什么?
2.j=(i++)+(++i)+(++i);在C中j=15,而在C++中j=13。后者是如何算的,为什么?
3.j=(++i)+(i++)+(++i);在C中j=15,而在C++中j=13。后者是如何算的,为什么?
展开
 我来答
394866351
2010-12-04 · TA获得超过124个赞
知道小有建树答主
回答量:276
采纳率:0%
帮助的人:206万
展开全部
9: int i = 3;
00401028 mov dword ptr [ebp-4],3
10: int j=0;
0040102F mov dword ptr [ebp-8],0
11: j = (++i)+(++i)+(++i);
00401036 mov eax,dword ptr [ebp-4];dword ptr [ebp-4]就是i,初值为3
00401039 add eax,1;
0040103C mov dword ptr [ebp-4],eax;这时 i = 4;
0040103F mov ecx,dword ptr [ebp-4]
00401042 add ecx,1
00401045 mov dword ptr [ebp-4],ecx; 这时i = 5;
00401048 mov edx,dword ptr [ebp-4]; edx = 5
0040104B add edx,dword ptr [ebp-4]; edx = 5+5
0040104E mov eax,dword ptr [ebp-4]; eax = 5;
00401051 add eax,1
00401054 mov dword ptr [ebp-4],eax;这时 i=6;
00401057 add edx,dword ptr [ebp-4]; 所以edx = 5+5+6 = 16;
0040105A mov dword ptr [ebp-8],edx; 所以j = 16;
这是VC++6.0下的汇编结果,上面有解释为什么是16
其他的也一样,调试的时候看下汇编就知道了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Only釗
2010-12-04 · TA获得超过232个赞
知道小有建树答主
回答量:130
采纳率:0%
帮助的人:37.9万
展开全部
第一个1.是4+4+4
2.是3+3+4
第二个1.是5+5+5
2.是3+5+5
第三个1.是5+5+5
2.是5+3+5
只要记得i++是先用后加++i是先加后用然后自己在不同平台调试就知道该平台的运算方式了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jlllyq
2010-12-04
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
与平台相关,计算的顺序不同,一个从左向右,一个从右向左
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
许瑞答问狂
2010-12-04
知道答主
回答量:18
采纳率:0%
帮助的人:17.4万
展开全部
不同的系统,计算方向不同,这就是自加运算符要慎用的原因!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式