鱼C论坛

 找回密码
 立即注册
查看: 3326|回复: 11

++运算符真难

[复制链接]
发表于 2013-10-6 21:47:55 | 显示全部楼层 |阅读模式
1鱼币
附近图片中的内容
为什么讲义上说的答案和我实际算出来的不一样呢?

运算符.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-6 22:02:42 | 显示全部楼层
本帖最后由 福禄娃娃 于 2013-10-6 22:04 编辑

编译器不同,具体差距看反汇编结果
你的为 p = 5 +5 +5 =15  i用完再自增为8
q= 7+ 7+ 8 =22  j先自增两次,前两项然后相加,j再自增一次,第三项和前面的值相加。j为8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-6 22:10:28 | 显示全部楼层

具体编译器的运算规则,怎么才能知道呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-6 22:14:33 | 显示全部楼层
本帖最后由 福禄娃娃 于 2013-10-6 22:31 编辑
DragonL915 发表于 2013-10-6 22:10
具体编译器的运算规则,怎么才能知道呢?

基本按照顺序点和副作用这两个规则来,如果有差异的话可能是编译器优化、不同处理的过程
反汇编过来就知道了
在VC或者VS中F9下个断点,然后F5调试,Alt+8查看反汇编代码
下面是反汇编代码
5:        int i = 5,j = 5,p = 0,q = 0;
00401028   mov         dword ptr [ebp-4],5
0040102F   mov         dword ptr [ebp-8],5
00401036   mov         dword ptr [ebp-0Ch],0
0040103D   mov         dword ptr [ebp-10h],0
6:        p = (i++) + (i++) + (i++);
00401044   mov         eax,dword ptr [ebp-4]
00401047   add         eax,dword ptr [ebp-4]
0040104A   add         eax,dword ptr [ebp-4]
0040104D   mov         dword ptr [ebp-0Ch],eax
00401050   mov         ecx,dword ptr [ebp-4]
00401053   add         ecx,1
00401056   mov         dword ptr [ebp-4],ecx
00401059   mov         edx,dword ptr [ebp-4]
0040105C   add         edx,1
0040105F   mov         dword ptr [ebp-4],edx
00401062   mov         eax,dword ptr [ebp-4]
00401065   add         eax,1
00401068   mov         dword ptr [ebp-4],eax
7:        q = (++j) + (++j) + (++j);
0040106B   mov         ecx,dword ptr [ebp-8]
0040106E   add         ecx,1
00401071   mov         dword ptr [ebp-8],ecx
00401074   mov         edx,dword ptr [ebp-8]
00401077   add         edx,1
0040107A   mov         dword ptr [ebp-8],edx
0040107D   mov         eax,dword ptr [ebp-8]
00401080   add         eax,dword ptr [ebp-8]
00401083   mov         ecx,dword ptr [ebp-8]
00401086   add         ecx,1
00401089   mov         dword ptr [ebp-8],ecx
0040108C   add         eax,dword ptr [ebp-8]
0040108F   mov         dword ptr [ebp-10h],eax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-6 22:46:05 | 显示全部楼层
额 学习了算是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-6 22:58:39 | 显示全部楼层
你反汇编看下吧 编译器不同结果是会不同的
顺便说下这个除了考试基本上没别的用处 真的不用纠结 具体的福禄已经说了我就不多说
我只想说 把精力放到该纠结的地方去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-7 20:51:46 | 显示全部楼层
刚开始没必要系摩纳哥这个东西的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-7 20:58:48 | 显示全部楼层
福禄娃娃 发表于 2013-10-6 22:14
基本按照顺序点和副作用这两个规则来,如果有差异的话可能是编译器优化、不同处理的过程
反汇编过来就知 ...

MARK一下,等以后学到反编译了再回过头来看看,谢谢大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-7 21:14:31 | 显示全部楼层
DragonL915 发表于 2013-10-7 20:58
MARK一下,等以后学到反编译了再回过头来看看,谢谢大神

大神倒不是,也许这点是我刚好会的。
一起进步、学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-8 15:28:12 | 显示全部楼层
学习一下子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-8 16:21:55 | 显示全部楼层
反汇编吧,可能编译器不一样{:1_1:}{:1_1:}{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-8 22:17:49 | 显示全部楼层
这个以前我也纠结过,看到楼上的解说,非常到位,{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 23:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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