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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 京鱼龙 中级黑马   /  2012-7-5 23:21  /  3450 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗京雨 于 2012-7-6 08:32 编辑

那位大侠给说下,我知道a++是先赋值在运算,++a是先运算后赋值。
有一道题是   int a = 3,b;
            b = (a++)+(++a)*2+(a++)+(++a);
我算出来的结果b = 18,但答案却是b = 25。
是不是第一个(a++)和第三个(a++)的值不一样,第二个和第四个(++a)的值不一样。
但是哪里不一样我就不知道了,是两个a的值不一样还是前面的(a++)和后面的(a++)整体的出来的值不一样。

请大侠帮我解答下,a++和++a快把我累死了

评分

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

查看全部评分

12 个回复

正序浏览
int a = 3,b;
b = (a++)+(++a)*2+(a++)+(++a);
分析:
1)首先分析第一个(a++),我们可以把他看成一个整数赋值给y。
    如:y=(a++)   因为a++是先赋值在自加的,又因为a=3.先把a=3赋值给y所以y等于3即y=(a++)=3,在把a进行自加1运算,所以此时a=4。
2)第二个(++a)*2,我们首先把(++a)赋值给x,
   如:x=(++a)   因为++a是先自加在赋值的,而a的值此时使用第一次分析的a的值为准,即a=4.先做a自加1运算所以a=5,再把a=5的值赋给x,即x=(++a)=5.
3)第三个(a++) 分析就按照(1)的分析步骤来分析,不过此时a=5,把(a++)赋值给z
   如:z=(a++)  因为a++是先赋值在自加的,又因为a=5.先把a=5赋值给y所以y等于3即y=(a++)=5,在把a进行自加1运算,所以此时a=6。
4)第四个(++a),我们首先把(++a)赋值给q,
   如:x=(++a)   因为++a是先自加在赋值的,而a的值此时使用第s三次分析的a的值为准,即a=6,先做a自加1运算所以a=7,再把a=7的值赋给x,即x=(++a)=7.
由此我, 可知,b=(a++)+(++a)*2+(a++)+(++a)
                        =x+y*2+z+q
                        = 3+5*2+5+7
                        =25
注意:自增(++)和自减(--)运算符只能用于变量中,不能用于常量和表达式,如5++或者(a+b)++都是不合法的,因为5是常量,常量的值不能改变。(a+b)++也是不可以的,
假如a+值为5,那么自增后得到的6放在那里?无变量提供存放。
回复 使用道具 举报
本帖最后由 姬仁贵 于 2012-7-6 12:39 编辑

b = (a++)+(++a)*2+(a++)+(++a);
这道题要一步一步来的  :
先看第一个(a++)  先取值再自增   (a++)=3    ;   a自增a=4;
再到第二个(++a)  先自增再取值   (++a)*2=5*2=10    ;    此时a=5;
再到弟三个(a++)  先取值再自增   (a++)=5    ;  a自增a=6;
最后一个   (++a)  先自增再取值   (++a)=7    ;  此时a=7;
所以最后表达式  b = (a++)+(++a)*2+(a++)+(++a);
                       b=     3   +    10    +   5   +   7=25;
                       最后的a=7;
以后遇到这样的问题记住一个方法:a++   先取值再自增    ;++a先自增再取值;后面的表达式中的a要跟着增加后的值走,因为自增后a的值已经改变了。这样就不会乱了。
回复 使用道具 举报
int a = 3,b;
            b = (a++)+(++a)*2+(a++)+(++a);
楼主可以这样理解:
a++加号是在后边,我一下看到a了,就能进行运算了,运算之后再来把自己+1
而++a呢是在前边,我得先把自己+1才能得得到自己,因为前边有加号挡着。。
所以:    b = (a++)+(++a)*2+(a++)+(++a);
第一个(a++)运算的时候是3,参加完运算自己就变成4了;
第二个(++a)因为开始的时候a=4,这是要自增之后才能进行运算,所以运算的时候是5,之后a的是也是5;
得三个(a++)运算的时候是5,参加完运算自己就变成6了;
第四个(++a)上来就得把自己变成7,然后在运算。
结果:3+5*2+5+7=25
回复 使用道具 举报
你怎么还没把贴改成已解决?还没明白?

那我叫你个容易理解的方法吧!//用你知道的知识叫你!!呵呵

你的原话:“我知道a++是先赋值在运算,++a是先运算后赋值”,其实你应该把你知道的两个a调换一下位置,应该变成“我知道++a是先赋值在运算,a++是先运算后赋值”,

明白没?自己去算!给你答案,不如教会你怎么算! 自己明白后,自己算出的结果才是硬道理!!!

                                             
                                                                                 ~坚持下去,我们都会成功的!同样是零基础哥们奉上!!

回复 使用道具 举报
a++先用后自加,++a先自加再用。如果只有a++和++a,没有别的运算时,这两个效果一样。
你这里,先a++,这时a=3,到第二步++a时a=5,因为a经过前一步自加后a=4,第三步再a++,这时a=5,第四步++a时,a=7。
所以是 3+5*2+5+7=25。希望有所帮助。
回复 使用道具 举报
int a = 3,b;
b = (a++)+(++a)*2+(a++)+(++a);

b=(a++)+(++a)*2+(a++)+(++a);
第一个(a++)是先临时存储 在自增的,意思就是a=3 (完后在自增一次 a=4  )         结果是3
第二个(++a)*2是接着上一个 a=4  (++a )是先自增 在赋值  所以 就是5*2=10  结果是10
第三个(a++)a=5  这个也是先临时存储 在自增的哦 和第一个是同理的 a=6                 结果是5
第四个(++a)先自增在赋值 a原来等于6 在自增一次  a=7                                   结果是7
     接下来就是我们要把这四个结果加起来了哦  3+10+5+7=25
楼主送你两句话呵呵 也算是总结的 以后碰到就不会晕了  
当自增参与运算的时候,++在前在后是有区别的:第一个就是++在前 总结: 先自增;在赋值。
                                             第二个就是++在后 总结:先进行临时存储,在自增,在赋值。

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1

查看全部评分

回复 使用道具 举报
首先要知道a++是先将a值经行运算,再自增...而++a是先自增一次然后再将自增以后的值经行运算...
                  |---相当于 3(a++先取值进行运算再自增,)
                  |              |---5(而这里的a的值还是相当于上一个a,这里先取值运算,在自增,自增以后就是6)
由此可知  (a++)+(++a)*2+(a++)+(++a)
                                               |           |---7(而这里因为上一个a的值是6,他先自增以后在取值运算,所以是7)
                                               |---5(这里的a,已经相当于前一个a++自增以后的值也就是4,而他又先自加一次,然后在取值运算,所以这里的a就相当于是5)

最后结果就是 3+5*2+5+7=25 ... 自己再看看吧...
回复 使用道具 举报
a=3
b = (a++)+(++a)*2+(a++)+(++a);  
b=(3)+(++a)*2+(a++)+(++a)---------a=4
b=3+(5)*2+(a++)+(++a)---------------a=5
b=3+(5)*2+(5)+(++a)-------------------a=6
b=3+(5)*2+(5)+(7)-----------------------a=7
b=25
回复 使用道具 举报
张立江 发表于 2012-7-5 23:29
b = (a++)+(++a)*2+(a++)+(++a);
第一个a++,结果是4,a变成了4
第二个++a,结果是4,a变成了5

a++是先使用,然后才自增。第一个a应该是在值为3时相加
回复 使用道具 举报
b = (a++)+(++a)*2+(a++)+(++a);
  b=   3+      5*2      + 5     +   7=25;
a=3参与运算,然后a++就是4
++a先加再运算所以是5
第二个a++先运算所以是5,再++   得6
最后一个先++得7再运算
   
回复 使用道具 举报
b = (a++)+(++a)*2+(a++)+(++a);
(a++)  先运算a=3    此时b = 3+(++a)*2+(a++)+(++a) 之后a自增 a=4
(++a)*2 先自增 a=5  再使用 b = 3+5*2+(a++)+(++a) 此时a=5
(a++) 先使用 b = 3+5*2+5+(++a)  后自增 a=6
(++a) 先自增 此时 a=7 后使用 b = 3+5*2+5+7

结果为b = 3+5*2+5+7=25

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张立江 于 2012-7-5 23:38 编辑

我的分析是错误的,已经删掉了,希望不会误导楼主
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马