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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李会成 中级黑马   /  2013-1-26 14:49  /  1589 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李会成 于 2013-2-18 11:41 编辑


int a=3;
(a--)<<a;
(--a)<<a;
(a++)++
(++a)++能帮忙解释下a的值在运算中的变化吗?

7 个回复

倒序浏览
a++是先把a拿走运算,然后再++。++a是反过来,先++,再用++ 后的结果算。
(a--)<<a    3<<3  结果是24,再--,结果是23  
(--a)<<a    2<<3  结果是16
(a++)++   结果是5
(++a)++  先算里面,再算外面,结果是5

在内存中是有一个临时变量存放a的数值

好像是这样的。
回复 使用道具 举报
java 运算符优先计算顺序(由高到低)
--------------------------------------------------------------------------------
                      运算符类型                               运算符
--------------------------------------------------------------------------------
               Unary: 一元                                 +- ++ -[其余的]
               Arithmetic(shift);算术(和移位)       * / % + - << >>
               Relational:关系                            > < >= <= == !=
               Logical(bitwise):逻辑(和按位)       && || & / ^
               Conditional(ternary:条件(三元)     A>B?X:Y
               Assignment: 赋值                        =(以及复合赋值,如*=)
--------------------------------------------------------------------------------
>> 右移 

>>> 右移,左边空出的位以0填充 
<< 左移


评分

参与人数 1黑马币 +6 收起 理由
Rancho_Gump + 6 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 王国伟. 于 2013-1-26 16:59 编辑

给你举个简单的例子吧
当a++或是++a单独出现时,a都是做自增加1运算,++放在前面或是后面结果是一样的。
所以
(a++)++或是(++a)++的结果是一样的。
当a++或是++a在给一个变量做赋值时:比如
int a=1;
y=a++;就是先把a的值赋给y在做自增加1,输出结果就是a=2,y=1
y=++a;就是a先做自增加1在赋值给y,输出结果为a=2,y=2

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 鼓励下

查看全部评分

回复 使用道具 举报
  1.                 int a=3;
  2.                 sop((a--)<<a); //这里是3 <<2  前面的A没变,减了1后面的就得到了这个值 所以是12
  3.                 a=3;
  4.                 sop((--a)<<a); // 这里是2 << 2 前面的A减了1才给后面的  所以结果是8
  5.                 a=3;
  6.                 sop(a++);你那个就相当于这样 先赋值后加 所以是结果3  但是值是4了..
  7.                 sop(a++);你那个就相当于这样 先赋值后加 所以是结果4  但是值是5了..

  8.                 a=3;
  9.                 sop(++a);你那个就相当于这样 先加后赋值 所以是结果4  值是4..

  10.                 sop(a++);你那个就相当于这样 先赋值后加 所以是结果4 但是值是5了..
复制代码

未命名.jpg (2.44 KB, 下载次数: 42)

未命名.jpg

评分

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

查看全部评分

回复 使用道具 举报
这涉及运算符优先级问题:自增++运算符优先级大于移位运算符,把括号去掉也没关系,结果一样!
回复 使用道具 举报
int a=3;
(a--)<<a;  //  a-- 之后再做位移运算,是以2还是3呢。这个真不懂。  
(--a)<<a;
(a++)++
(++a)++能帮忙解释下a的值在运算中的变化吗?
回复 使用道具 举报
请勿复制他人帖子,技术分不是入学的门槛而是为了帮助大家学习而存在的。

请勿再次发此类帖子了!

此贴就关闭了。此后如有再次发现直接封禁处理,请看到此贴的会员也加以注意。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马