关于JAVA的一个问题,请教各位编程大神

a=3,那(--a)<<a的结果是什么?怎么算的?我要想详细的结果... a=3,那(--a)<<a的结果是什么? 怎么算的? 我要想详细的结果 展开
 我来答
mjonir
2014-03-14 · 超过17用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:38.2万
展开全部
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)
百度网友990ce41
2014-03-13 · 超过26用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:56.7万
展开全部
a = 3,那--a = 2;

2 << 3 应该是2的二进制表示法左移3位,2的二进制应该是0000 0010,左移3位后
0001 0000,再转成十进制就是 2*4=16
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
解忧杂货店2019
2014-03-13 · TA获得超过458个赞
知道答主
回答量:58
采纳率:0%
帮助的人:14.8万
展开全部
--a = 2
2<<2
为16.
先计算()里的得到a=2,然后2<<2,移位操作,得到16.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
点水般轻盈
2014-03-13 · 超过23用户采纳过TA的回答
知道答主
回答量:36
采纳率:100%
帮助的人:51.7万
展开全部
结果是8。分析:a是3,--a是2,简单的说就是将2左移3位,2的2进制表示形式0010(这里只写了最后四位,其实是16位)左移3位就是1000,就给就是8咯
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式