设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。后者是如何算的,为什么? 展开
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。后者是如何算的,为什么? 展开
4个回答
展开全部
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
其他的也一样,调试的时候看下汇编就知道了
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
其他的也一样,调试的时候看下汇编就知道了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个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是先加后用然后自己在不同平台调试就知道该平台的运算方式了……
2.是3+3+4
第二个1.是5+5+5
2.是3+5+5
第三个1.是5+5+5
2.是5+3+5
只要记得i++是先用后加++i是先加后用然后自己在不同平台调试就知道该平台的运算方式了……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
与平台相关,计算的顺序不同,一个从左向右,一个从右向左
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不同的系统,计算方向不同,这就是自加运算符要慎用的原因!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询