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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 放飞自己365 中级黑马   /  2013-8-29 23:24  /  1607 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 放飞自己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, 下载次数: 252)

360软件小助手截图20130829231755.jpg

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
a++等于10。++a等于11。
LZ加油吧
回复 使用道具 举报
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;

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
a += a++;等效于a=a+a++;右边的第一个a的值为5被它记录住了,然后是a++运算结果是5,然后是a变成6,但是求的是之前记录的5和a++运算的结果5的和,所以是10    第二个式子也是一样的道理

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
这个老毕的视频里有讲,建议认真看几遍,好好理解一下。
回复 使用道具 举报
假设a=5,a+=(a=a++);在这个式子中(a=a++);a的值为5,然后给a赋值为6了,那么a+=(a=a++)相当于
a=a+(a=a++),(a=a++)第一步运算后再和a相加,那么前面a的值不是赋值后的6吗。
回复 使用道具 举报
不对啊。运行的结果是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了。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
辛春鹏 发表于 2013-8-31 08:53
不对啊。运行的结果是20啊。楼主。
int a=5;
a+=a++;

恩,如果两个式子叠加起来是20的,我原来就是不理解其中a的值不随(a++)改变这里给不大理解的,谢谢你了,在内存中a的值应该是先记录了,所以是两个值相加20的结果的,分开两个式子分别计算就是10的。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马