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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高欢欢 中级黑马   /  2012-7-15 13:07  /  2305 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高欢欢 于 2012-7-18 07:36 编辑

如果编译器不进行优化,i++效率比后者高
如果进行优化,
两者最终代码是一样的,效率没有差别!

大家还有没有什么好的解释呢?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
这应该涉及到算法了
回复 使用道具 举报
哪个方便写哪个
不解释
回复 使用道具 举报
我顺便把i+=1也说了吧

这是在程序员面试宝典上的一道题,对此题的解释为:

i=i+1最低,执行过程:
1)读取右边x的地址
2)i+1
3)读取左边x的地址
4)将右值给左边的x(编译器并不认为左右x的地址相同)

i+=1次之,过程:
1)读取右边x的地址
2)i+1
3)将得到的值给i(因为i的地址已经读出)

i++的效率最高,过程:
1)读取右边i的地址
2)i自增1

所以i++的效率最高.

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这两种再计算机内部实现过程中是有区别
i=i+1的过程相当:
  temp=i+1; i=temp;
i++的过程相当:
  temp=i; i=temp+1; return temp;

换种表现形式:
(1) i = i + 1 执行过程如下:
     1-1 读取右x的地址;
     1-2 x + 1;
     1-3 读取左x的地址;
     1-4 将右值传给左边的x

(2) i++; 他的执行过程是:
     3-1 读取右x的地址
     3-2 x自增1


所以说i++的执行效率还是比i=i+1要高的

点评

一直还以为一样呢。。 厉害  发表于 2012-7-15 16:49
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马