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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

彭超华

中级黑马

  • 黑马币:0

  • 帖子:16

  • 精华:0

--a   书上解释是:当递增或递减运算符放在其运算数前面,java会在获得该运算数的值之前执行相应的操作,并将其用于表达式的其他部分,(为先运算再赋值)
a--  解释是:当运算符放在运算数的后面,java会先获取该操作数的值再执行递增或递减运算(先赋值再运算)
int a=3;
(a--)<<a;
(--a)<<a;
(a++)++
(++a)++能帮忙解释下a的值在运算中的变化吗?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 鼓励下~~

查看全部评分

9 个回复

正序浏览
假设int a=2;
     int x;
x=(++a)+(++a)+(++a);
变量a初始化在内存中的值为2,算术运算的顺序是从左往右,第一个++a后,a在内存中的值为3,再把3同时赋值给第二和第三个++a,然后开始第二个++a计算后,a的值变4再赋值给第三个++a,最后求和运算,这样理解没问题吧!
回复 使用道具 举报
位雪 中级黑马 2012-6-14 13:16:58
9#
++a:a自增一后参与运算  
a++:a参与运算后自增一
--a:a自减一后参与运算
a--:a参与运算后自减一
(a--)<<a:a左移a个单位后,a值减一参与下次运算  
(--a)<<a:a值减一后左移a个单位

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 新手奖~~

查看全部评分

回复 使用道具 举报
郑冬 中级黑马 2012-6-14 13:05:22
8#
int a=3;
(a--)<<a;
(--a)<<a;这几个都很简单,按照解释就可以
(a++)++,(++a)++这两个是有问题的,因为++和--运算符中是不能出现常数或表达式的
回复 使用道具 举报
胡卿 中级黑马 2012-6-14 12:57:11
7#
int a=3;//先把3赋值给a,
(a--)<<a;//a--,a先左移3个单位,3乘2的3次方变成24,然后a再自减1变成23,
(--a)<<a;//--a,a先自减1变成2,再左移3个单位,2乘2的3次方变成16,
(a++)++//a++,a自增两次为5.
(++a)++//++a,a自增两次为5.
回复 使用道具 举报
int a=3;
(a--)<<a;//a--,先把3赋值给a--,然后a再自减1变成2,这时(a--)<<a,就是把3<<2,但是最后这个动作并没有改变a的值,a等于2.
(--a)<<a;//--a,a先自减1变成1,,再把a赋值给--a,则--a=1,这时(--a)<<a,就是把1<<1,最后这个动作没有改变a的值,a等于1.
(a++)++//a++就是先把a的值1赋给a++,然后a再自加1变成2,这时(a++)++,意思是先把a++的值1赋给(a++)++,然后a++再自加1变成2,最后这个动作
             没有改变a的值,a等于2.
(++a)++//++a就是先把a的值自加1变成3,然后再赋给++a,则++a=3,这时(++a)++,意思是先把++a的值3赋给(++a)++,然后++a再自加1变成4,最后这个
            动作没有改变a的值,a等于3.
回复 使用道具 举报
我的总结:
java中的运算符有这几种:
算术运算符:+ - * / % 分别是加减乘除求余
比较运算符:<  ,> ,<=, >= ,==, !=分别是小于, 大于, 小于等于,大于等于,不等于
逻辑运算符:或(||) 与(&&) 非(!)
赋值运算符:
+= 把变量加上右侧的值然后再赋值给自身
-= 把变量减去右侧的值然后再赋值给自身
这是常用的,应该还有%=但不常用。

位运算符:
++  递增
--  递减

条件运算符
条件?值1:值2

等等 应该还有比如<<和>>就相当于乘以或除以2的次幂。

结合你的题目:
(a--)<<a;a先乘以2的a次方a再自减1。
(--a)<<a;a先自减一再乘以2的a次方(这里的a是自减了之后的a)
(a++)++;a最后等于a+2
(++a)++;a最后等于a+2

但是如果这种情况b=(a++)++;
b=a+1了 ++在后面是要先赋值在自增的。

同学希望对你有帮助。

评分

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

查看全部评分

回复 使用道具 举报
int a=3;
(a--)<<a;//<<左边a-- 后减先使用a=3  然后a自减1 a=2 所以<<右边为2
(--a)<<a;//上面运算完成后a=2, --a 先自减1 即a=1 所以<<两边都为1

(a++)++和(++a)++应该是错误的吧!()内的是运算式,不能用作++的参数
回复 使用道具 举报
其实,根据解释,已经很明确了。
++a与a++的区别就是先让a加1然后使用a和先使用a然后让a加1
如果你不清楚,像这种问题,先思考,然后程序运行一下就明白了。
回复 使用道具 举报
本帖最后由 刘克方 于 2012-6-14 12:30 编辑

a++具体解释:
int a=2;

System.out.println(a++);//此处的打印结果为2,也就是说a+1后的结果还没有赋给a;
System.out.println(a);//此处的打印结果为3,也就是说a+1后的结果赋给了a;
总结:a++运算并没有立即将a+1后的结果赋给a;a此时还是原来的值;
      在执行过a++这句代码后,才将a+1的值赋给a;

++a具体解释:     
int a=2;
System.out.println(++a);//此处的打印结果为3,表示在执行过++a时,即刻将a+1的值赋给a;

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马