黑马程序员技术交流社区

标题: 设 a = 3,则表达式 int b = (a-- )<<a,求出b的值 [打印本页]

作者: 次长风    时间: 2013-12-24 17:02
标题: 设 a = 3,则表达式 int b = (a-- )<<a,求出b的值
结果为什么是12呢,不应该是先算括号里面的吗,之后a不应该等于2吗,
作者: 2013_ok    时间: 2013-12-24 17:32
运行:  
int a=3;
                int b=(a--)<<a;//相当于 int b=3<<2;     <<左移运算,左移的规则只记住一点:丢弃最高位,0补最低位
                System.out.println(a+"-"+b);//所以输出结果是12
作者: 程玉习    时间: 2013-12-25 12:34
括号里的a--先赋值后运算,其值还是3,而后的a为运算后,a=2  ;所以是 int b = 3<<2;  左移快捷算法,b = 3*2(2)(2的左移位数次幂) = 12;
作者: 次长风    时间: 2013-12-25 14:03
程玉习 发表于 2013-12-25 12:34
括号里的a--先赋值后运算,其值还是3,而后的a为运算后,a=2  ;所以是 int b = 3 ...

谢谢,圣诞节快乐!
作者: 由然自美    时间: 2013-12-27 12:13
因为--在后面,所以是先得出结果才自减,(a--)中的a的值在此刻并没有改变,还是3,3 <<2结果是12,b的值是12.此刻a才会自减变成了2
作者: lipanquan    时间: 2014-1-3 19:24
a = 3,则表达式 int b = (a-- )<<a,
先算()里面的= 3,再算<<a,这时的a=2;
0x11(=3) << 2 == 0x1100
=2^3+2^2 = 12




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