黑马程序员技术交流社区

标题: 新手运算符的问题,求大虾指点 [打印本页]

作者: 黑马潘浩    时间: 2013-3-5 20:45
标题: 新手运算符的问题,求大虾指点
本帖最后由 黑马潘浩 于 2013-3-6 12:53 编辑

1.   int a=2;int b=a+3*a++;
2.   int a=2;int b=(a++) +3*a;
为什么1运行的结果b等于8,而2运行的结果b等于11. 而且++的运算优先级是高于*的。

作者: 沈文杰    时间: 2013-3-5 20:59
其实我也不懂,但是我想说,你还是不要这样写,不规范也不便于阅读,完全是给自己找麻烦
作者: 朱盛文    时间: 2013-3-5 21:06
不懂,只知道第一个是怎么回事,第一个是先计算后,a才自增。第二个就搞不明白了
作者: 彭波    时间: 2013-3-5 21:07
1.   int a=2;int b=a+3*a++; //程序从左往右读,a先于3相称后得6,然后才自增变为3
2.   int a=2;int b=(a++) +3*a;//a先是2,然后才自增1,与3相称得9
a++是a值先参与运算后在自增1
++a是a值自增1后在参与运算
作者: 张宝    时间: 2013-3-5 21:08
1.   int a=2;int b=a+3*a++;
2.   int a=2;int b=(a++) +3*a;
为什么1运行的结果b等于8,而2运行的结果b等于11. 而且++的运算优先级是高于*的。

因为++在a的后边,++为后缀时,先取值做运算,然后再自加1。所以b=a+3*a++;
b=2+3*2=8  //此处 a=2,运算完成后再自加1   
b=(a++) +3*a=2+3*3=11  //与1的道理一样,++为后缀,a取值运算完之后再自加1,所以最后边的a的值是3.
作者: lgh521911    时间: 2013-3-5 21:24
int b = (a++) + 3*a 可以分开来看成int c = a++; int b = c + 3*a;因为++运算是先取值后自加,那么 c的值就是2,而a的值变成了3。那么b = 2 + 3 * 3 = 11 了。

希望能帮到你~
作者: 明锦添    时间: 2013-3-5 22:42
1.   int a=2;int b=a+3*a++;
2.   int a=2;int b=(a++) +3*a;
为什么1运行的结果b等于8,而2运行的结果b等于11. 而且++的运算优先级是高于*的  

第一个是因为先引用a后自加,而第二个事因为a自加后在计算的,所以答案不一样




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