鱼C论坛

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

++运算符真难

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

运算符.png
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

具体编译器的运算规则,怎么才能知道呢?
小甲鱼最新课程 -> https://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查看反汇编代码
下面是反汇编代码
  1. 5:        int i = 5,j = 5,p = 0,q = 0;
  2. 00401028   mov         dword ptr [ebp-4],5
  3. 0040102F   mov         dword ptr [ebp-8],5
  4. 00401036   mov         dword ptr [ebp-0Ch],0
  5. 0040103D   mov         dword ptr [ebp-10h],0
  6. 6:        p = (i++) + (i++) + (i++);
  7. 00401044   mov         eax,dword ptr [ebp-4]
  8. 00401047   add         eax,dword ptr [ebp-4]
  9. 0040104A   add         eax,dword ptr [ebp-4]
  10. 0040104D   mov         dword ptr [ebp-0Ch],eax
  11. 00401050   mov         ecx,dword ptr [ebp-4]
  12. 00401053   add         ecx,1
  13. 00401056   mov         dword ptr [ebp-4],ecx
  14. 00401059   mov         edx,dword ptr [ebp-4]
  15. 0040105C   add         edx,1
  16. 0040105F   mov         dword ptr [ebp-4],edx
  17. 00401062   mov         eax,dword ptr [ebp-4]
  18. 00401065   add         eax,1
  19. 00401068   mov         dword ptr [ebp-4],eax
  20. 7:        q = (++j) + (++j) + (++j);
  21. 0040106B   mov         ecx,dword ptr [ebp-8]
  22. 0040106E   add         ecx,1
  23. 00401071   mov         dword ptr [ebp-8],ecx
  24. 00401074   mov         edx,dword ptr [ebp-8]
  25. 00401077   add         edx,1
  26. 0040107A   mov         dword ptr [ebp-8],edx
  27. 0040107D   mov         eax,dword ptr [ebp-8]
  28. 00401080   add         eax,dword ptr [ebp-8]
  29. 00401083   mov         ecx,dword ptr [ebp-8]
  30. 00401086   add         ecx,1
  31. 00401089   mov         dword ptr [ebp-8],ecx
  32. 0040108C   add         eax,dword ptr [ebp-8]
  33. 0040108F   mov         dword ptr [ebp-10h],eax
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-10-6 22:46:05 | 显示全部楼层
额 学习了算是
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2013-10-7 20:51:46 | 显示全部楼层
刚开始没必要系摩纳哥这个东西的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

MARK一下,等以后学到反编译了再回过头来看看,谢谢大神
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

大神倒不是,也许这点是我刚好会的。
一起进步、学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-10-8 15:28:12 | 显示全部楼层
学习一下子
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-10-8 16:21:55 | 显示全部楼层
反汇编吧,可能编译器不一样{:1_1:}{:1_1:}{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-10-8 22:17:49 | 显示全部楼层
这个以前我也纠结过,看到楼上的解说,非常到位,{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-10 21:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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