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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疯狂程序 中级黑马   /  2013-3-27 20:58  /  2126 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 疯狂程序 于 2013-3-27 22:49 编辑

int i = 1;

(i++)<<i;

i的结果是什么?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

11 个回复

倒序浏览
int i = 1;
(i++)<<i;
自增运算符的优先级比位运算符更高,所有先自增i++后为2,再移位操作2<<2
结果为8
回复 使用道具 举报
int i=1;
i=(i++)<<i;//这句话先让i自增1,<<右边的 i 是初始化的值1,所以第二句代码执行是2向左移1,
0010向左移1,变成0100,转变成十进制是4

所以最后结果是4

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王俊杰 于 2013-3-27 21:27 编辑

我觉得 i 的结果是2

i++后变成了2


只不过,(i++)<<i;这一句在Eclipse里面提示错误。

我想应该有个变量来接受(i++)<<i 的值吧

i 的值变成2应该没问题。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
楼主代码不明确..............第二句是赋值给谁吗?如果第二句不赋给i,那i只参与了自增运算,结果2是,要是赋值给i,如3楼 为4............
回复 使用道具 举报
本帖最后由 qwe8234118 于 2013-3-27 21:34 编辑

结果是4.
过程如下:
i=1
1<<(1+1)
1的二进制表现形式是0001左移两位是0100
转换回十进制就是4所以结果是4
  1. class  java0327d5
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int i = 1;

  6.                
  7.                 System.out.println((i++)<<i);
  8.         }
  9. }
复制代码
不知道是不是你要的答案

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
张昶 中级黑马 2013-3-27 21:29:14
7#
int i=1;
i=(i++)<<i;   
第一句代码执行i自增1,i 就等于2;
第二句代码执行是2向左移1,如:0010向左移1,变成0100,转变成十进制是4

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
及时追问,或改成【已解决】哦~
回复 使用道具 举报

  1. //借用下qwe同学代码
  2. class  java0327d5
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int i = 1;

  7.                
  8.               System.out.println((i++)<<i);
  9.              /*
  10.                   首先明确
  11.                  ( i++)这个表达式的值为未自增前的i
  12.                ①i++表达式的值为1
  13.                ②i=i+1->i=2
  14.                ③1<<2->1*2^2=4   
  15.            */
  16.         }
  17. }
复制代码
回复 使用道具 举报
个人觉得这种问题最简单的办法就是敲代码运行,完全可以自己解决啊
回复 使用道具 举报
哈哈哈 楼主开了个小玩笑 或者叫脑筋急转弯吧

楼主的问题是 i 的结果,而不是第二个语句的结果

我看不少人都去计算第二条语句啦
回复 使用道具 举报
先不管楼主的代码正不正确,就当是正确的吧。
我觉得 i  的结果是2.
原因: 在 i ++ 语句进行计算时,是先把 i 提取出来,i 再自增一次。然后运算时还是用的原来的值。所以代码(i ++)<< i  变为 1 << 2 。但楼主问的是 i  的值,所有为 i为自增后的值。

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