黑马程序员技术交流社区

标题: 论坛提问 [打印本页]

作者: 刘永贵    时间: 2014-3-16 16:12
标题: 论坛提问
a=3    (--a)<<a的结果是什么
作者: optimisticpig    时间: 2014-3-16 16:43
(--a)<<a结果应该是8吧,a先自减一次,然后左移3位。
作者: 蓝枫    时间: 2014-3-16 16:49
本帖最后由 蓝枫 于 2014-3-16 17:53 编辑

奥,现在明白
作者: 上官睿鹏    时间: 2014-3-16 16:57
本帖最后由 上官睿鹏 于 2014-3-16 16:58 编辑

这个自己写个小程序运行一下就可以知道结果了
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a = 3;
  6.                 int i = (--a)<<a; //--a是2后面的a也变成2了,所以是0010向左移2位变成1000
  7.                 System.out.println(i); //打印结果为 8
  8.         }
  9. }
复制代码

作者: ok-Prince    时间: 2014-3-16 17:20
结果是8,--a,是先进行自减,再把结果赋值给a,所以说--a<<a就相当于2<<2,2右移两位,也就是2*2的2次方,结果是8.
作者: のソ夏末    时间: 2014-3-16 17:21
int a=3;
int (--a)<<a;
关键是要对(--a)<<a运算的拆分,可以拆分为int a=a-1,a<<a,
a自减后所赋值给a的值一直延续到最后,所以左移的位数应该是2,而不是3。
最终结果应该是8     2<<2,相当于2*2²=8。




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