MyException - 我的异常网
当前位置:我的异常网» C语言 » i++*i++的结果与预期不一致的有关问题

i++*i++的结果与预期不一致的有关问题

www.myexceptions.net  网友分享于:2013-03-26  浏览:9次
i++*i++的结果与预期不一致的问题?
本帖最后由 lomper 于 2013-03-19 22:50:02 编辑
请大神们解释一下原因:
比如第一个i++*i++=25?为什么不是30,输出的第一个i为什么是5?为何第二个是7?从电脑CPU在运行时的情况能解释一下吗?
比如i++;在汇编中为add al,1
累加器在运行时的情况,怎么解释上面的问题~!求指教



#include<stdio.h>
main()
{
int i,a,b,c,d;
i=a=b=c=d=5;

printf("\ni=a=b=c=d=5\n\n");

printf("i++*i++ = %d\t i= %d",i++*i++,i);
printf("\t i= %d%d\n",i);

printf("++a*++a = %d\t a= %d",++a*++a,a);
printf("\t a= %d\n",a);

printf("++b*b++ = %d\t b= %d",++b*b++,b);
printf("\t b= %d\n",b);

printf("c++*++c = %d\t c= %d",c++*++c,c);
printf("\t c= %d\n",d);

printf("--d*--d = %d\t d= %d",--d*--d,d);
printf("\t d= %d\n\n",d);
}


c c++ i++ i++*i++

------解决方案--------------------
看本版的置顶帖吧! 
------解决方案--------------------
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

------解决方案--------------------
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

------解决方案--------------------
纠结这个的人真多啊,看置顶贴吧
------解决方案--------------------
都不知道学校里C语言都教的什么东西,为什么要纠结在这些蛋疼的问题上。
------解决方案--------------------

为什么大家前赴后继的问这么一个问题? 结果取决于编译如何翻译你的代码咯。

  int i = 5;
013D1249  mov         dword ptr [i],5  
  int t = i++ * i++;
013D1250  mov         eax,dword ptr [i]  
013D1253  imul        eax,dword ptr [i]  // i*i -> eax
013D1257  mov         dword ptr [t],eax  //eax -> t
013D125A  mov         ecx,dword ptr [i] 
013D125D  add         ecx,1  
013D1260  mov         dword ptr [i],ecx  
013D1263  mov         edx,dword ptr [i]  
013D1266  add         edx,1  
013D1269  mov         dword ptr [i],edx 

------解决方案--------------------
我觉得是有些面试官无聊
------解决方案--------------------


置顶吧!!!
------解决方案--------------------
别这样写。请看置顶。
------解决方案--------------------

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有