黑马程序员技术交流社区

标题: 复合赋值运算 [打印本页]

作者: 放飞自己365    时间: 2013-8-29 23:24
标题: 复合赋值运算
本帖最后由 放飞自己365 于 2013-8-31 17:38 编辑

用复合赋值运算符并配合上自加操作,这两个表达式的第二个式子中为什么会是10而不是11呢?int a=5;
int b=5;
a += a++;
a+=(a=a++); //这个式子中的值为什么是10而不是11呢?
               






360软件小助手截图20130829231755.jpg (23.97 KB, 下载次数: 250)

360软件小助手截图20130829231755.jpg

作者: yxz    时间: 2013-8-29 23:50
a++等于10。++a等于11。
LZ加油吧
作者: 苏联兵    时间: 2013-8-30 00:32
a++是先运算后自增
而++a是先自增后运算
这种情况你只需要分清楚 a++; 或者 ++a;  中 a的值  和 a++; 这个表达式的值就可以了,
不管是前++还是后++。a的值都是加1之后的值,只是 a++; 这个表达式的值是a。 ++a;这个表达式的值是 a+1  

自增: 不管是前++还是后++,对于a的值都是一样的(a+1),只是整个自增表达式的值不同
(a=a++);    //相当于  先a=a,    再a=a+1;
y=++x;    //相当于  先x=x+1,  再y=x;
作者: 泡沫之夏    时间: 2013-8-30 00:32
a += a++;等效于a=a+a++;右边的第一个a的值为5被它记录住了,然后是a++运算结果是5,然后是a变成6,但是求的是之前记录的5和a++运算的结果5的和,所以是10    第二个式子也是一样的道理
作者: 苏联兵    时间: 2013-8-30 00:34
这个老毕的视频里有讲,建议认真看几遍,好好理解一下。
作者: 放飞自己365    时间: 2013-8-30 22:19
假设a=5,a+=(a=a++);在这个式子中(a=a++);a的值为5,然后给a赋值为6了,那么a+=(a=a++)相当于
a=a+(a=a++),(a=a++)第一步运算后再和a相加,那么前面a的值不是赋值后的6吗。
作者: 辛春鹏    时间: 2013-8-31 08:53
不对啊。运行的结果是20啊。楼主。
int a=5;
a+=a++;
此时,a的值是5.即a=a+a++.着时候后面表达式的值赋给了a,表达式中a++的值是5,所以这句结束后a的值是10了。
a+=(a=a++);  这一句中,先执行()中的内容。a++的表达式的值是10.a被赋值10,a的值就是10了。再执行a+=10;所以此时a的值是20了。
作者: 放飞自己365    时间: 2013-8-31 17:36
辛春鹏 发表于 2013-8-31 08:53
不对啊。运行的结果是20啊。楼主。
int a=5;
a+=a++;

恩,如果两个式子叠加起来是20的,我原来就是不理解其中a的值不随(a++)改变这里给不大理解的,谢谢你了,在内存中a的值应该是先记录了,所以是两个值相加20的结果的,分开两个式子分别计算就是10的。。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2