DragonL915 发表于 2013-10-6 21:47:55

++运算符真难

附近图片中的内容
为什么讲义上说的答案和我实际算出来的不一样呢?

福禄娃娃 发表于 2013-10-6 22:02:42

本帖最后由 福禄娃娃 于 2013-10-6 22:04 编辑

编译器不同,具体差距看反汇编结果
你的为 p = 5 +5 +5 =15i用完再自增为8
q= 7+ 7+ 8 =22j先自增两次,前两项然后相加,j再自增一次,第三项和前面的值相加。j为8

DragonL915 发表于 2013-10-6 22:10:28

福禄娃娃 发表于 2013-10-6 22:02 static/image/common/back.gif
编译器不同,具体差距看反汇编结果
你的为 p = 5 +5 +5 =15i用完再自增为8
q= 7+ 7+ 8 =22j先自增两次 ...

具体编译器的运算规则,怎么才能知道呢?

福禄娃娃 发表于 2013-10-6 22:14:33

本帖最后由 福禄娃娃 于 2013-10-6 22:31 编辑

DragonL915 发表于 2013-10-6 22:10 static/image/common/back.gif
具体编译器的运算规则,怎么才能知道呢?
基本按照顺序点和副作用这两个规则来,如果有差异的话可能是编译器优化、不同处理的过程
反汇编过来就知道了
在VC或者VS中F9下个断点,然后F5调试,Alt+8查看反汇编代码
下面是反汇编代码5:      int i = 5,j = 5,p = 0,q = 0;
00401028   mov         dword ptr ,5
0040102F   mov         dword ptr ,5
00401036   mov         dword ptr ,0
0040103D   mov         dword ptr ,0
6:      p = (i++) + (i++) + (i++);
00401044   mov         eax,dword ptr
00401047   add         eax,dword ptr
0040104A   add         eax,dword ptr
0040104D   mov         dword ptr ,eax
00401050   mov         ecx,dword ptr
00401053   add         ecx,1
00401056   mov         dword ptr ,ecx
00401059   mov         edx,dword ptr
0040105C   add         edx,1
0040105F   mov         dword ptr ,edx
00401062   mov         eax,dword ptr
00401065   add         eax,1
00401068   mov         dword ptr ,eax
7:      q = (++j) + (++j) + (++j);
0040106B   mov         ecx,dword ptr
0040106E   add         ecx,1
00401071   mov         dword ptr ,ecx
00401074   mov         edx,dword ptr
00401077   add         edx,1
0040107A   mov         dword ptr ,edx
0040107D   mov         eax,dword ptr
00401080   add         eax,dword ptr
00401083   mov         ecx,dword ptr
00401086   add         ecx,1
00401089   mov         dword ptr ,ecx
0040108C   add         eax,dword ptr
0040108F   mov         dword ptr ,eax

yixingqingkong 发表于 2013-10-6 22:46:05

额 学习了算是

牡丹花下死做鬼 发表于 2013-10-6 22:58:39

你反汇编看下吧 编译器不同结果是会不同的
顺便说下这个除了考试基本上没别的用处 真的不用纠结 具体的福禄已经说了我就不多说
我只想说 把精力放到该纠结的地方去

trek600 发表于 2013-10-7 20:51:46

刚开始没必要系摩纳哥这个东西的

DragonL915 发表于 2013-10-7 20:58:48

福禄娃娃 发表于 2013-10-6 22:14 static/image/common/back.gif
基本按照顺序点和副作用这两个规则来,如果有差异的话可能是编译器优化、不同处理的过程
反汇编过来就知 ...

MARK一下,等以后学到反编译了再回过头来看看,谢谢大神{:5_106:}

福禄娃娃 发表于 2013-10-7 21:14:31

DragonL915 发表于 2013-10-7 20:58 static/image/common/back.gif
MARK一下,等以后学到反编译了再回过头来看看,谢谢大神

大神倒不是,也许这点是我刚好会的。
一起进步、学习

magicyuc 发表于 2013-10-8 15:28:12

学习一下子

夏七夕 发表于 2013-10-8 16:21:55

反汇编吧,可能编译器不一样{:1_1:}{:1_1:}{:1_1:}

沸腾的火焰 发表于 2013-10-8 22:17:49

这个以前我也纠结过,看到楼上的解说,非常到位,{:1_1:}
页: [1]
查看完整版本: ++运算符真难