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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马潘浩 中级黑马   /  2013-3-5 20:45  /  1959 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马潘浩 于 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. 而且++的运算优先级是高于*的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

6 个回复

倒序浏览
其实我也不懂,但是我想说,你还是不要这样写,不规范也不便于阅读,完全是给自己找麻烦
回复 使用道具 举报
不懂,只知道第一个是怎么回事,第一个是先计算后,a才自增。第二个就搞不明白了
回复 使用道具 举报
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后在参与运算

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
int b = (a++) + 3*a 可以分开来看成int c = a++; int b = c + 3*a;因为++运算是先取值后自加,那么 c的值就是2,而a的值变成了3。那么b = 2 + 3 * 3 = 11 了。

希望能帮到你~
回复 使用道具 举报
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自加后在计算的,所以答案不一样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马