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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小骗子 中级黑马   /  2013-12-26 19:25  /  1247 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a=4;
1.a+=(a++)
2.a+=(++a);
3.(++a)+=(a++)

为什么?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

9 个回复

倒序浏览
1,a+=(a++),等价于a++;a+=a ,所以a=8
回复 使用道具 举报
1,a+=(a++),等价于a++;a+=a ,所以a=8     2,a+=(++a);等价于++a;a+=a;所以a=9   3,(++a)+=(a++)编译报错,赋值运算符,左边出现二次运算了
回复 使用道具 举报
越,在乎的人 发表于 2013-12-26 20:52
1,a+=(a++),等价于a++;a+=a ,所以a=8     2,a+=(++a);等价于++a;a+=a;所以a=9   3,(++a)+=(a++)编译报错 ...

a+=(a++),等价于a++;a+=a ,所以a=8 ;
a++;
a+=a
就会是10了
回复 使用道具 举报
a+=(a++),
等价于a++; 这里是后++,所以先拿a的实际值做运算,算完了,在++,在这里a=4
a+=a 等于a=a+a-->a=4+4=8
syso(a)输出的结果是8

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
++/--运算符的运算,运算符如果在变量前面,就先做自增/自减,再拿改变之后的值去做下一步的运算
                             如果在变量的后面,则先拿变量的值做运算,运算完在改变变量的值
回复 使用道具 举报
1题=8 2题=9 3题会报错,不过按你想表达意思来说是本来应该等于9. 至于为什么,a+=b的意思就是一个累加运算而已,可以写成a=a+b,a++的意思是运算后加一运算,++a是运算前加一运算。分别可以表示成b+a++=b+a  然后a+1,++a+b=1+a+b   

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
Diaraelo 发表于 2013-12-26 21:57
1题=8 2题=9 3题会报错,不过按你想表达意思来说是本来应该等于9. 至于为什么,a+=b的意思就是一个累加运算 ...

恩。明白了,谢谢
回复 使用道具 举报
小骗子 发表于 2013-12-26 22:01
恩。明白了,谢谢

不客气 不客气,其实也是帮我复习嘛!!!论坛本来就是这个作用,忘记了就来找问题复习,不懂的就看其他人怎么说然后自己思考下就有收获。
回复 使用道具 举报
a+=(a++)结果为8,因为++在后,所以是自增前的结果.
2.a+=(++a)结果为9,因为++在前面,所以先自增,再算值
3.(++a)+=(a++)会编译失败,因为左边会出现2次赋值吧

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马