wwwdafa888:++a*--a为什么等于25

来源:百度文库 编辑:高校问答 时间:2024/04/27 02:00:46
定义
int a=5,m;
表达式m=++a*--a为什么等于25???
求救!!!!

1: #include <stdio.h>
2:
3: void main()
4: {
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,48h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-48h]
0040101C mov ecx,12h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
5: int a=5,m;
00401028 mov dword ptr [ebp-4],5
6: m=(++a)*(--a);
0040102F mov eax,dword ptr [ebp-4]
00401032 add eax,1
00401035 mov dword ptr [ebp-4],eax
00401038 mov ecx,dword ptr [ebp-4]
0040103B sub ecx,1
0040103E mov dword ptr [ebp-4],ecx
00401041 mov edx,dword ptr [ebp-4]
00401044 imul edx,dword ptr [ebp-4]
00401048 mov dword ptr [ebp-8],edx
7: printf("%d",m);
0040104B mov eax,dword ptr [ebp-8]
0040104E push eax
0040104F push offset string "%d" (0042001c)
00401054 call printf (00401090)
00401059 add esp,8
8: }
0040105C pop edi
0040105D pop esi
0040105E pop ebx
0040105F add esp,48h
00401062 cmp ebp,esp
00401064 call __chkesp (00401110)
00401069 mov esp,ebp
0040106B pop ebp
0040106C ret
这是vc下的反汇编代码
实际上操作是先将++ --运算问了,再进行乘法.

++ -- 的运算优先级比*高

++,--优先级高于*,先算++a,a=6;再--a,a=5,此时++a的a也等于5了,(a=a+1)*(a=a-1),所以等于25

因为是先算完++ --的优先级比*高,
先算完++a,a为6,再算--a,a又回到5,(实际上编译器也可能先算完--再算++,反正最后都会回到5)
所以5*5=25

优先级:++ -- *,++最大,*最小,++a等于6,a等于6,算--a时此时a=6,则--a等于5,a等于5,最终a=5.则结果为25

我看就是30