黑马程序员技术交流社区

标题: 先加,后加的问题 [打印本页]

作者: ytzhyp    时间: 2011-12-30 11:01
标题: 先加,后加的问题
本帖最后由 ytzhyp 于 2011-12-31 10:41 编辑

比如说i= i+1,i+=i;还有i++,和++i有区别么
说的详细点
作者: 阮金明    时间: 2011-12-30 11:13
i=i+1和i+=1两个效果是一样的,但后者效率高点
i++,后加指需要执行完当前这条语句之后,i再加1,即是不影响当前表达式的i值
++i前加,当前执行到这个表达式时就加1,也就是i变成i+1进行运算
作者: 张绍成    时间: 2011-12-30 11:18
标题: i
本帖最后由 张绍成 于 2011-12-30 11:20 编辑

比如说i= i+1,i+=i;还有i++,和++i有区别么
i = i + 1 ;// 将 i 的值 加 1 ;
i + = i ;//和上句代码的意思一样,使用中没感觉有什大的优点(可能是看起来 比较简洁)
i ++ ;// i 自加 1 ;不是过是先使用 后增加。比如 int i = 1 ; b = i ++ ; 运行结果 b = 1 ;
++ i ;// i 自加 1;不是过是先增加,后使用。比如 int i = 1 ; b = ++ i ; 运行结果 b = 2 ;
作者: 想好了再写    时间: 2011-12-30 11:35
本帖最后由 想好了再写 于 2011-12-30 11:37 编辑

i=i+1跟i+=1效果是一样的,
因为i+=1
在C语言里就是i=i+1

i++是先使用i的值然后进行i本身的加1运算
++i则是先将i本身加1,再使用变量的值
比如:
int i=23;
int age;
age=i++;
那么age的值是23,而i的值就是24
而如果上面的age=i++换成age=++i
则age的值为24,i的值也是24

还有就是i++和++i有一个效率问题
从上面就可以看到
i++要先 返回一个值而这个值要先保存到一个临时变量里,然后在 i+1
++i就直接进行本身的加1运算,不用进行临时数据的变量的保存
所以前者效率会低一点
还有这个效率问题就是如果i是int型的话,效率问题会被优化掉,也就是说如果i是int,那么++i跟i++ 的效率一样,如果是别的类型的话,就会出现效率问题。
作者: 詹英鹏    时间: 2011-12-30 11:43
首先
++和++i都是对i进行+1的操作,不同的是i++是在i值被使用后才+1而++i是i值在被使用之前就+1;拿你的例子进行说明
先分析count=(i++)+(i++)+(i++);运算是从左向右的,由于i++是在i值被使用后才+1所以第一个括号的(i++)应该为3,但是i的值变成了4,当运算第二个括号(i++)此时i的值是4所以第二个括号的(i++)为4但是此时i的值变成5了,类推第三个括号的(i++)为5但是此时i的值变成了6;也就是说该等式变为count=(3)+(4)+(5)=12此时i的值为6.
在分析int j=3;
  count=(++j)+(++j)+(++j); ++j的操作顺序是先将j加1后在进行操作,所以第一个括号(++j)先将j加1此时j变为4,所以括号的值相当于4;第二个括号将j加1后j的值变为5;第三个括号将j加1后j的值变为6所以等式相当于 count=(4)+(5)+(6)此时j的值是6
综上i与j 相当。简单的说i++就是先使用的i的值然后再加1,而++i就是先将i+1,然后使用i改变后的值。
希望你能采纳
那个i=1+i;i+=i;貌似应该没啥区别吧
作者: 黑马张伟    时间: 2011-12-30 17:27
i+=i是    i= i+1的简写两个原理上一样
i++进行运算的时候i值第一次不加1原值参与运算
++i进行的运算的时候值先加1再进行运算
作者: 付星    时间: 2011-12-30 17:31
i++和i+=1;是样的,还有i=i+1,i+=1是i=i+1的简写,那i++就更简了
对于i++和++i来说
1.如果它们不赋给一个变量,那它们是等价的
2.如果
i=0;
j=0;
j=i++;那么j赋值了0,i再自加成了1
j=++i;那么i先自加1结果就是1,再赋值给j,j现在也是1了

作者: 刘健    时间: 2011-12-30 20:06
i++举个例子就是for(int i=0;i<10;i++)是每次循环完后i+1即第一次for循环i=0,第二次i=1。而++i是第一次i=1,第一次i=2
作者: 马新乐    时间: 2011-12-30 21:10
简单点说 K= i++是先赋值后运算  K得到的值等于i
K=++i 则得到的值为i+1  因为是先运算后赋值




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