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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

结果为什么是12呢,不应该是先算括号里面的吗,之后a不应该等于2吗,

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

5 个回复

倒序浏览
运行:  
int a=3;
                int b=(a--)<<a;//相当于 int b=3<<2;     <<左移运算,左移的规则只记住一点:丢弃最高位,0补最低位
                System.out.println(a+"-"+b);//所以输出结果是12
回复 使用道具 举报
括号里的a--先赋值后运算,其值还是3,而后的a为运算后,a=2  ;所以是 int b = 3<<2;  左移快捷算法,b = 3*2(2)(2的左移位数次幂) = 12;

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报 1 0
程玉习 发表于 2013-12-25 12:34
括号里的a--先赋值后运算,其值还是3,而后的a为运算后,a=2  ;所以是 int b = 3 ...

谢谢,圣诞节快乐!
回复 使用道具 举报
因为--在后面,所以是先得出结果才自减,(a--)中的a的值在此刻并没有改变,还是3,3 <<2结果是12,b的值是12.此刻a才会自减变成了2

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
a = 3,则表达式 int b = (a-- )<<a,
先算()里面的= 3,再算<<a,这时的a=2;
0x11(=3) << 2 == 0x1100
=2^3+2^2 = 12

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

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