c语言自增自减运算符总结

c语言自增自减运算符总结

ID:9235515

大小:231.59 KB

页数:4页

时间:2018-04-24

c语言自增自减运算符总结_第1页
c语言自增自减运算符总结_第2页
c语言自增自减运算符总结_第3页
c语言自增自减运算符总结_第4页
资源描述:

《c语言自增自减运算符总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C语言自增自减运算符总结978299005@qq.com【例】inti=5,j=5,p,q;p=(i++)+(i++);q=(++j)+(++j);printf("%d,%d,%d,%d",i,j,p,q);i=5;j=5;p=(i++)+(i++)+(i++);q=(++j)+(++j)+(++j);printf("%d,%d,%d,%d",i,j,p,q);i=5;j=5;p=(i++)+(i++)+(i++)+(i++);q=(++j)+(++j)+(++j)+(++j);printf("%d,%d,%d,%d",i,j,p,q);i=5;j=5;p=(i++)+(i

2、++)+(i++)+(i++)+(i++);q=(++j)+(++j)+(++j)+(++j)+(++j);printf("%d,%d,%d,%d",i,j,p,q);【讲解】在VC6.0下编译,运行。这段程序的运行结果是7,7,10,148,8,15,229,9,15,2210,10,25,41可见a++这类运算,是整个式子算完以后,统计一下有几个++,再统一给a加上几。而++a这类运算,在2个以下的时候,是先统计下有几个++,然后都加上去,然后再进行赋值。超过两个了,那么第三个开始,就是分步来,前两个算完了,第三个把前面得到的值拿来用。所以,q=(++j)+(++j)+(++j

3、);(j=5)q就等于7+7+8=22.总结一句话:vc环境中:++i++i先使i的值自增两次再赋值!i++i++先赋值再使i的值自增两次!【注意】自增自减运算符的对象是变量,不是常量或表达式。如++i+++j就不合法。这是因为C语言的编译器对程序编译时,从左到右尽可能多地将字符组成一个运算符或标识符,因此++i+++j等效于++(i++)+j,第1个“++”作用的对象是表达式“i++”这是不允许的。【汇编的依据】原理表达式中除了预算法本身的优先级外,还有一个结合性问题。在++j+++j+++j;中,因为存在两个同级的+运算,根据+运算符的左结合性,在编译时,其实是先处理前面的(++j

4、+++j)这部分,然后再将此结果再和++j相加。具体过程参见汇编代码:intb=++j+++j+++j;0040B7DDmovecx,dwordptr[ebp-8]0040B7E0addecx,10040B7E3movdwordptr[ebp-8],ecx//第一个++j0040B7E6movedx,dwordptr[ebp-8]0040B7E9addedx,10040B7ECmovdwordptr[ebp-8],edx//第二个++j0040B7EFmoveax,dwordptr[ebp-8]0040B7F2addeax,dwordptr[ebp-8]//++j+++j0040B7F

5、5movecx,dwordptr[ebp-8]0040B7F8addecx,10040B7FBmovdwordptr[ebp-8],ecx//第三个++j0040B7FEaddeax,dwordptr[ebp-8]//++j+++j+++j0040B801movdwordptr[ebp-10h],eax//赋值给b另外我们看看a=i+++i+++i++;的汇编代码:inta=i+++i+++i++;0040B7B6moveax,dwordptr[ebp-4]0040B7B9addeax,dwordptr[ebp-4]//i+i0040B7BCaddeax,dwordptr[ebp-4]

6、//i+i+i0040B7BFmovdwordptr[ebp-0Ch],eax//赋值给a0040B7C2movecx,dwordptr[ebp-4]0040B7C5addecx,10040B7C8movdwordptr[ebp-4],ecx//第一次i++0040B7CBmovedx,dwordptr[ebp-4]0040B7CEaddedx,10040B7D1movdwordptr[ebp-4],edx//第二次i++0040B7D4moveax,dwordptr[ebp-4]0040B7D7addeax,10040B7DAmovdwordptr[ebp-4],eax//第三次i+

7、+果然不出所料。到此,++运算符前置后置的问题应该彻底解决了。为了验证一下上述结论,我们再看:例四:inti=1;intj=1;inta=i+++i+++i+++i+++i+++i+++i++;//七个intb=++j+++j+++j+++j+++j+++j+++j;printf("%d,%d",a,b);printf("%d,%d",i,j);规则就是规则,咱的计算机可不是黑客帝国的母体,总是要遵循它的a=1+1+1+1+1+1+1=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。