c++的i++是怎么实现的?
发布网友
发布时间:2024-10-24 13:30
我来回答
共1个回答
热心网友
时间:2024-11-14 03:17
一个一个来吧:
首先,这个结果和编译器对于加法运算的结合方式是有关系的,
这里就分析比较常见的右结合的编译器,也就是对于从右向左进行加法运算的编译器。
如果是左结合编译器,结果就不一样了。
另外还限定一点,i++运算在二元表达式进行完毕后立刻进行++处理,没有其他优化。
现在的编译器太多,规则也不尽相同,差别会比较大的。
两个概念注意实际使用,
1.先不考虑++处理,
b=a1+a2+a3
上面这个语句是先进行加法,最后进行赋值或者++处理,
++处理的优先级比+高,
2.i是一个变量,在声明时,编译器给它分配了存储空间,
所以对于i的任何处理,不论是i++还是++i,也不论处理了几次,都是对于同一块存储空间的处理
下面开始正式的解题:
int i=3;k=(++i)+(++i)+(i++);
i=3,//i的初值为3
k=(++i)+(++i)+(i++);
先从右向左处理:i++加上++i,处理结果再加上++i
i++ //先将i=3代入,由于整个表达式没有处理完毕,先不进行++处理
++i //先进行++处理,i的值为4,再将i代入
所以在执行一次++后,再处理加法,i++加上++i结果为4+4=8
本次加法执行完毕后,i++再处理,i变为5
最左边的++i //先进行++处理,i的值为6,再将i代入
所以表达式运算过程中,i的值变为6,最后进行加法运算:6+8=14
所以加法运算的结果为k的值14,i的值为6
int i=3;k=(++i)+(++i)+(++i);
i=3,//i的初值为3
k=(++i)+(++i)+(++i);
先从右向左处理:++i加上++i,处理结果再加上++i
++i //先进行++处理,i的值为4,再将i代入
++i //先进行++处理,i的值为5,再将i代入
所以在执行两次++后,再处理加法,++i加上++i结果为5+5=10
最左边的++i //先进行++处理,i的值为6,再将i代入
所以表达式运算过程中,i的值变为6,最后进行加法运算:6+10=16
所以加法运算的结果为k的值16,i的值为6
int i=3;k=(i++)+(i++)+(i++);
i=3,//i的初值为3
k=(=(i++)+(i++)+(i++);
先从右向左处理:i++加上i++,处理结果再加上i++
i++ //先将i=3代入,由于整个表达式没有处理完毕,先不进行++处理
i++ //先将i=3代入,由于整个表达式没有处理完毕,先不进行++处理
所以在执行加法时,i++加上i++结果为3+3=6
本次加法执行完毕后,两次i++再处理,i变为5
最左边的i++ //先将i=5代入,由于整个表达式没有处理完毕,先不进行++处理
所以表达式运算过程中,i的值变为5,再进行加法运算:5+6=11
本次加法执行完毕后,i++再处理,i变为6
所以加法运算的结果为k的值11,i的值为6