黑马程序员技术交流社区

标题: a=1;a=a++之后a输出为什么还是1? [打印本页]

作者: 吴俊灿    时间: 2016-3-7 22:25
标题: a=1;a=a++之后a输出为什么还是1?
a=a++不是自身要做一次自加吗
作者: 奋飞的小模糊    时间: 2016-3-7 22:31
这个问题考察了两点
1:++和=的优先级问题
2:前++和后++的问题

首先进行的是++,a自身加1,然后再进行赋值,后++赋的是++前的值,所以程序执行的是两部
1,a值先变为a+1
2,再把a值赋值给a
结果就变成了a
作者: zhangyibiao    时间: 2016-3-7 22:34
楼主要知道a++,是后置的自增,先用a的值然后在自增,楼主可以这样测试,b=a++然后分别输出a和b,如果想得到b的值为a+1的话,应该写b=++a
作者: 吴俊灿    时间: 2016-3-7 22:40
zhangyibiao 发表于 2016-3-7 22:34
楼主要知道a++,是后置的自增,先用a的值然后在自增,楼主可以这样测试,b=a++然后分别输出a和b,如果想得到b ...

b=a++,b的值是1,但是a是2啊。
a=a++,将a赋给a之后,a不是还要做一次自加吗,那a就是2l啊
作者: zhangyibiao    时间: 2016-3-7 22:58
a=a++是这样的,假设a=1,因为++后置,所以先把a的值赋值给前面的a,然后在对后面的a自增1
作者: zk342577507    时间: 2016-3-7 23:26
左边的a非右边的a,++在后就是先赋值,所以左边的a等于1,右边的a就等于a + 1 = 2;
作者: 走走停停0306    时间: 2016-3-8 01:02
a=a++;应该是运算符优先级的问题吧,先计算a++赋值给了左边,再把a赋值给左边。应该是这样吧:1. a = a+1;2. a = a。第二部右边的a还是自增前的值
作者: 天赐潇潇    时间: 2016-3-8 01:32
http://blog.csdn.net/miderph84/article/details/3390166,这个贴子说的很细  你可以看看
作者: phoenix1992    时间: 2016-3-8 09:09
a = a++,自赠浮高虽然能使这个数自增一,但因使用的位置不同,会有不同的效果。a++,先将a赋值,再自增一。如果是++a的话,先自增一,a就变成2了,然后再赋值。
作者: and4576sdo    时间: 2016-3-8 10:54
原来一直不懂。看完才看明白!
作者: luomoss    时间: 2016-3-8 21:40
奋飞的小模糊 发表于 2016-3-7 22:31
这个问题考察了两点
1:++和=的优先级问题
2:前++和后++的问题

先把a变成a+1,再把a赋予a,既然a已经是a+1,那赋值不就是a+1了么
作者: flyhui    时间: 2016-3-13 00:19
int a=1;a=a++的结果之所以是1,是因为++后置,是先进行赋值,再进行自增。赋值后a=1,然后a++可以看成是a+1=2.这时a=2,因为汇编语言是从右往左运算的,2赋值给a后,前面还有一个式子a=1,然后在底层重新把1赋值给a,所以输出的结果是1
作者: 友人A    时间: 2016-3-13 00:40
楼上的回答都好牵强啊,表示看的都很迷糊。网上搜了一下。然后有了我自己的理解:
int i=0;
i=i++;
这两句其实等效于下面:
int a=i;
i++;
i=a;
楼主明白了吗?我感觉就是这样解释的。
作者: 何必ˇㄨ那么假    时间: 2016-3-13 00:59
后自增啊!!!!!
作者: xushao    时间: 2016-3-13 10:54
计算机底层图

a=a .png (72.6 KB, 下载次数: 20)

a=a  .png

作者: Senmonfy    时间: 2016-3-13 13:06
是的,执行语句时先进性赋值存储,然后在进行自增。




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