黑马程序员技术交流社区

标题: 下面各算式后a的值 [打印本页]

作者: 小骗子    时间: 2013-12-26 19:25
标题: 下面各算式后a的值
int a=4;
1.a+=(a++)
2.a+=(++a);
3.(++a)+=(a++)

为什么?

作者: 越,在乎的人    时间: 2013-12-26 20:45
1,a+=(a++),等价于a++;a+=a ,所以a=8
作者: 越,在乎的人    时间: 2013-12-26 20:52
1,a+=(a++),等价于a++;a+=a ,所以a=8     2,a+=(++a);等价于++a;a+=a;所以a=9   3,(++a)+=(a++)编译报错,赋值运算符,左边出现二次运算了
作者: 小骗子    时间: 2013-12-26 21:37
越,在乎的人 发表于 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了
作者: 越,在乎的人    时间: 2013-12-26 21:54
a+=(a++),
等价于a++; 这里是后++,所以先拿a的实际值做运算,算完了,在++,在这里a=4
a+=a 等于a=a+a-->a=4+4=8
syso(a)输出的结果是8

作者: 越,在乎的人    时间: 2013-12-26 21:57
++/--运算符的运算,运算符如果在变量前面,就先做自增/自减,再拿改变之后的值去做下一步的运算
                             如果在变量的后面,则先拿变量的值做运算,运算完在改变变量的值
作者: Diaraelo    时间: 2013-12-26 21:57
1题=8 2题=9 3题会报错,不过按你想表达意思来说是本来应该等于9. 至于为什么,a+=b的意思就是一个累加运算而已,可以写成a=a+b,a++的意思是运算后加一运算,++a是运算前加一运算。分别可以表示成b+a++=b+a  然后a+1,++a+b=1+a+b   
作者: 小骗子    时间: 2013-12-26 22:01
Diaraelo 发表于 2013-12-26 21:57
1题=8 2题=9 3题会报错,不过按你想表达意思来说是本来应该等于9. 至于为什么,a+=b的意思就是一个累加运算 ...

恩。明白了,谢谢
作者: Diaraelo    时间: 2013-12-26 22:37
小骗子 发表于 2013-12-26 22:01
恩。明白了,谢谢

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





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