4个回答
展开全部
public class Test3{
public static void main(String[] args) throws Exception {
int a=3;
sop(2<<(--a)); //8 2<<2
// sop(2<<(a--)); //16 2<<3
// sop((--a)<<2); //8 2<<2
// sop((a--)<<2); //12 3<<2
// sop((--a)<<(a--)); //8 2<<2
// sop((--a)<<(--a)); //4 2<<1
// sop((a--)<<(--a)); //6 3<<1
// sop((a--)<<(a--)); //12 3<<2
}
public static void sop(Object obj){
System.out.println(obj);
}
}
我调试的结果如上。
那么看上面后4个最复杂的情况,解释是:
移位符左右都是:
(1) 自减符在前 当下的重名符号a就要立即被作用并传到右面的所有(优先级默认从左到右)
(2)自减符在后 当下的重名符号a暂时不被作用但是 会并传到右面的所有同名符号a
如(a--)<<(--a) a--不会立即作用到第一个a 但这个自减会作用到第二个a,而第二个a同样有个立即作用的自减 所以为3<<1 结果为3*2=6
你的原题是最简单的了....如上所述相当于 2<<2 (2*2*2=8)
public static void main(String[] args) throws Exception {
int a=3;
sop(2<<(--a)); //8 2<<2
// sop(2<<(a--)); //16 2<<3
// sop((--a)<<2); //8 2<<2
// sop((a--)<<2); //12 3<<2
// sop((--a)<<(a--)); //8 2<<2
// sop((--a)<<(--a)); //4 2<<1
// sop((a--)<<(--a)); //6 3<<1
// sop((a--)<<(a--)); //12 3<<2
}
public static void sop(Object obj){
System.out.println(obj);
}
}
我调试的结果如上。
那么看上面后4个最复杂的情况,解释是:
移位符左右都是:
(1) 自减符在前 当下的重名符号a就要立即被作用并传到右面的所有(优先级默认从左到右)
(2)自减符在后 当下的重名符号a暂时不被作用但是 会并传到右面的所有同名符号a
如(a--)<<(--a) a--不会立即作用到第一个a 但这个自减会作用到第二个a,而第二个a同样有个立即作用的自减 所以为3<<1 结果为3*2=6
你的原题是最简单的了....如上所述相当于 2<<2 (2*2*2=8)
展开全部
a = 3,那--a = 2;
2 << 3 应该是2的二进制表示法左移3位,2的二进制应该是0000 0010,左移3位后
0001 0000,再转成十进制就是 2*4=16
2 << 3 应该是2的二进制表示法左移3位,2的二进制应该是0000 0010,左移3位后
0001 0000,再转成十进制就是 2*4=16
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
--a = 2
2<<2
为16.
先计算()里的得到a=2,然后2<<2,移位操作,得到16.
2<<2
为16.
先计算()里的得到a=2,然后2<<2,移位操作,得到16.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果是8。分析:a是3,--a是2,简单的说就是将2左移3位,2的2进制表示形式0010(这里只写了最后四位,其实是16位)左移3位就是1000,就给就是8咯
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询