A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 coding_wang 于 2015-9-8 22:53 编辑

第一篇地址:
[url=http://bbs.itheima.com/thread-236166-1-1.html]b=++a + a++的各种变种问题的计算过程大揭密!![/url]

之前说到了两个自增变量的相加问题
咱们在来研究一下三个自增变量相加的计算过程
以下是int a=3,b=0;b = a++ + ++a + ++a; 的汇编过程:
  1. //b = a++ + ++a + ++a;
  2. //int a=3,b=0;
  3. mov   dword ptr [ebp-4]   3
  4. mov    dword ptr [ebp-8]   0
  5. //b = a++ + ++a + ++a;
  6. mov   eax   dword ptr [ebp-4]                   //eax=a
  7. add   eax   1                                   //eax = eax + 1
  8. mov  dword ptr [ebp-4]   eax                   //a=eax   a==4
  9. mov   ecx   dword ptr [ebp-4]                   //ecx= a;
  10. add   ecx   dword ptr [ebp-4]                   //ecx= exc + a = 4 + 4=8,  a==4
  11. mov  edx  dword ptr [ebp-4]                   //edx = a
  12. add   edx   1                                   //edx = edx + 1
  13. mov   dword ptr [ebp-4]   edx                   //a = edx  a=5
  14. add   ecx   dword ptr [ebp-4]                   //ecx = ecx + a = 8 + 5 = 13
  15. mov   dword ptr [ebp-8]   ecx                   //b=ecx
  16. mov   eax   dword ptr [ebp-4]                   //eax = a
  17. add    eax   1   // eax = eax + 1
  18. mov   dword ptr [ebp-4]   //eax                a = eax
复制代码
根据汇编过程,我们可以知道它计算过程是这样的:
1)a = a + 1 = 4;
2) int c =a * 2 = 8;
3) a= a + 1 = 5;
4) b= c + a = 8 + 5 = 13
所以,整个表达式先执行了左边两个自增变量的计算,再将计算结果与第三个自增变量进行计算。

唉~~~本来试了好多例子……慢慢说可以说一年的……可是……我的泡面都泡成粥了……

直接上干货吧

1.两个自增变量进行运算时,按(++a)变量类型的个数先处理自增变量,将处理后的值同等替代 a++和++a ,最后根据运算符进行运算,而表达式中的(a++)类型变量的加1处理,都等到语句运算结束后才进行处理。
例如:
  b= a++ + ++a等同与 {b=(a+1 + a+1);a += 1; }
  b=a++ + a++等同与{b=a+a; a += 2;}
  b=++a + ++a等同与 { a=a+2 ;b=a + a; }
处理过程只跟(++a)型变量个数有关,与顺序无关,
例如:
  b=a++ + ++a;的值  等于   b=++a + a++; 的值

2.当多个自增变量进行运算时,将根据运算符的优先级两两结合运算
例如  b = a++ + a++ + ++a;  等同与  b = ((a++ + a++) + ++a)=((a+a)+ ++a )=((a+a)+a+1); a=((a+1)+2);

虽然凉了的泡面粥的不好吃,但是解决了问题的心情还是很好的,幸好我没有听妹子的话放弃测试跟她出去玩~~~~

…………………………呃………………………………我是不是错过了什么……

7 个回复

正序浏览
人工再置顶
回复 使用道具 举报
翟宇浩 发表于 2015-9-9 22:14
分析的太具体了,看得我也醉了

有点太抓细节了~不过闲的蛋疼~刚好有空~~哈哈
回复 使用道具 举报
分析的太具体了,看得我也醉了
回复 使用道具 举报
羊口羊口羊 发表于 2015-9-8 22:45
这么拼我也是醉了,偶像哦!!

                           
回复 使用道具 举报
这么拼我也是醉了,偶像哦!!
回复 使用道具 举报

我这帖子能申精么?
回复 使用道具 举报 1 0
简直理解的不能!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马