当前位置:软件学习 > 其它软件 >>

深度解析自加自减运算 ++ --

关于自减自减运算,这是一个比较让人纠结的问题。

初级认识

 
int i=3; 
int j; 
j=i++;或者j=++i; 

当为前者时 先把i的值赋予j,然后i++。
当为后者时先把i自加,然后把i赋予j。

为什么是这样子的呢?因为当编译器解析这个表达式时,运算符有两个,一个“= ”一个“++”。因为++优先级比较高,所以应该先做运算,但是该符号的结合方向是由右向左,当j=i++时,++右边是没有变量的。所以i没有一开始就自加。当所有运算结束时,i才自加。

中级认识

[html] 
int i=3; 
int j; 
j=i++ + ++i;或者j=++i + ++i;或者j=i++ + i++; 

第一种情况,为j=4+4=8,i=5.
第二种情况,为j=5+5=10,i=5;

第三种情况,为j=3+3=6,i=5;

为什么是这个样子呢?还是从编译器解析表达式谈起,运算符有四个:两个“++”,一个“=”,一个“+"。按照优先级应该先运算++,再运算+,再运算=。考虑到++的结合方向,所以当++位于自变量的右侧时,自变量不变。当位于自变量左侧时自变量先进行运算。考虑系统只为自变量i分配了唯一的内存空间,对于第一种情况先考虑的是 i++和++i,i++没有改变i的值,i++是的i=4,编译器会,当编译器从内存中读取i的值赋予i++时,i的值早已变成了4.所以会有j=4+4=8。第二种情况++i和++i,系统会将i的值加1,存回i存储空间。在从i存储空间读出,自加1,再存回i存储空间。现在i的内存空间值已变成5.系统从i内存空间中读取值相加,得到j=5+5=10.第三种情况 i++和i++,++在右侧,变量i不做处理。直接从i存储空间取值相加,得到j=3+3=6。最后才对i进行两次自加。

深度认知

 
(++i)+=(i++); 
[html] 
(++i)=(++i)+(i++); 
 
不等效。第一种情况为11,第二种情况为13. 

补充:软件开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,