鱼C论坛

 找回密码
 立即注册
查看: 1774|回复: 13

[已解决]自增

[复制链接]
发表于 2020-2-11 14:06:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
捕获.PNG 想问下q的值不应该是24吗 ,为什么是22,求指点
最佳答案
2020-2-11 15:32:27
  1. 0040DF9F C7 45 F8 05 00 00 00 mov         dword ptr [ebp-8],5    //ebp-8=5
  2. 17:       q=(++j)+(++j)+(++j);
  3. 0040DFCD 8B 4D F8             mov         ecx,dword ptr [ebp-8]  //ecx=5
  4. 0040DFD0 83 C1 01             add         ecx,1                  //ecx=5+1=6
  5. 0040DFD3 89 4D F8             mov         dword ptr [ebp-8],ecx  //ebp-8=6
  6. 0040DFD6 8B 55 F8             mov         edx,dword ptr [ebp-8]   //edx=6
  7. 0040DFD9 83 C2 01             add         edx,1                   //edx=6+1=7
  8. 0040DFDC 89 55 F8             mov         dword ptr [ebp-8],edx   //ebp-8=7
  9. 0040DFDF 8B 45 F8             mov         eax,dword ptr [ebp-8]   //eax=7
  10. 0040DFE2 03 45 F8             add         eax,dword ptr [ebp-8]   //eax=7+7=14
  11. 0040DFE5 8B 4D F8             mov         ecx,dword ptr [ebp-8]   //ecx=7
  12. 0040DFE8 83 C1 01             add         ecx,1                   //ecx=7+1=8
  13. 0040DFEB 89 4D F8             mov         dword ptr [ebp-8],ecx   //ebp-8=8
  14. 0040DFEE 03 45 F8             add         eax,dword ptr [ebp-8]   //eax=14+8=22
  15. 0040DFF1 89 45 F0             mov         dword ptr [ebp-10h],eax //ebp-10h=22
复制代码

你看下汇编就知道情况了,问题在与前两个相加的时候,是用7+7,其实这个计算式最后的结果就是q=j+j+j
只是j的值不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-11 14:10:32 | 显示全部楼层
编译器问题,每个编译器可能得到的值都不一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 14:48:21 | 显示全部楼层
你的程序我运行了一下,运行结果为18,22,8,8
在我看来,p=5+6+7=18;
q=6+7+8=21;
可是不理解为什么q=22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 15:24:37 | 显示全部楼层
看c语言课本(蓝色皮)的27页上边有 编译器问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 15:32:27 | 显示全部楼层    本楼为最佳答案   
  1. 0040DF9F C7 45 F8 05 00 00 00 mov         dword ptr [ebp-8],5    //ebp-8=5
  2. 17:       q=(++j)+(++j)+(++j);
  3. 0040DFCD 8B 4D F8             mov         ecx,dword ptr [ebp-8]  //ecx=5
  4. 0040DFD0 83 C1 01             add         ecx,1                  //ecx=5+1=6
  5. 0040DFD3 89 4D F8             mov         dword ptr [ebp-8],ecx  //ebp-8=6
  6. 0040DFD6 8B 55 F8             mov         edx,dword ptr [ebp-8]   //edx=6
  7. 0040DFD9 83 C2 01             add         edx,1                   //edx=6+1=7
  8. 0040DFDC 89 55 F8             mov         dword ptr [ebp-8],edx   //ebp-8=7
  9. 0040DFDF 8B 45 F8             mov         eax,dword ptr [ebp-8]   //eax=7
  10. 0040DFE2 03 45 F8             add         eax,dword ptr [ebp-8]   //eax=7+7=14
  11. 0040DFE5 8B 4D F8             mov         ecx,dword ptr [ebp-8]   //ecx=7
  12. 0040DFE8 83 C1 01             add         ecx,1                   //ecx=7+1=8
  13. 0040DFEB 89 4D F8             mov         dword ptr [ebp-8],ecx   //ebp-8=8
  14. 0040DFEE 03 45 F8             add         eax,dword ptr [ebp-8]   //eax=14+8=22
  15. 0040DFF1 89 45 F0             mov         dword ptr [ebp-10h],eax //ebp-10h=22
复制代码

你看下汇编就知道情况了,问题在与前两个相加的时候,是用7+7,其实这个计算式最后的结果就是q=j+j+j
只是j的值不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 16:39:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 17:27:13 | 显示全部楼层
你看的旧课吧,这个代码好像语法不规范,所以编译器得到的答案不一样,还是看新课吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-2-11 21:36:10 | 显示全部楼层
367 发表于 2020-2-11 14:48
你的程序我运行了一下,运行结果为18,22,8,8
在我看来,p=5+6+7=18;
q=6+7+8=21;

你这脑回路和我差的有点多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 21:37:07 | 显示全部楼层
4goodworld 发表于 2020-2-11 15:32
你看下汇编就知道情况了,问题在与前两个相加的时候,是用7+7,其实这个计算式最后的结果就是q=j+j+j
只 ...

哥,我还没学汇编,看的不太懂,能解释更详细点吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 21:38:48 | 显示全部楼层
王逗比666 发表于 2020-2-11 17:27
你看的旧课吧,这个代码好像语法不规范,所以编译器得到的答案不一样,还是看新课吧

我两个都在看,希望理解更深点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 23:12:44 | 显示全部楼层
张世来4610484 发表于 2020-2-11 21:38
我两个都在看,希望理解更深点

因为旧课的参考教材是《C程序设计》这书放到现在看有些老了,一些东西不适合用在现在,如果你要两种一起学那么案例什么的要以新课为主,旧课用来加深概念映像
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 23:14:22 | 显示全部楼层
张世来4610484 发表于 2020-2-11 21:38
我两个都在看,希望理解更深点

你的问题当时我也困惑过,后来了解了一下这个代码属于语法不规范,不要纠结,因为它是因为代码本身不正确而导致输出结果不同的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 00:02:51 | 显示全部楼层
张世来4610484 发表于 2020-2-11 21:37
哥,我还没学汇编,看的不太懂,能解释更详细点吗

ebp-8就是j
ebp-10h就是q
其他的你都看成变量得了
你看我注释部分,不就很清楚了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 19:01:33 | 显示全部楼层
我的也有这个问题,解决不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 19:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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