黑马程序员技术交流社区
标题:
int i = 1 ; (i++)<<i ; 求i结果是什么?
[打印本页]
作者:
疯狂程序
时间:
2013-3-27 20:58
标题:
int i = 1 ; (i++)<<i ; 求i结果是什么?
本帖最后由 疯狂程序 于 2013-3-27 22:49 编辑
int i = 1;
(i++)<<i;
i的结果是什么?
作者:
胡志超
时间:
2013-3-27 21:07
int i = 1;
(i++)<<i;
自增运算符的优先级比位运算符更高,所有先自增i++后为2,再移位操作2<<2
结果为8
作者:
HM刘博
时间:
2013-3-27 21:17
int i=1;
i=(i++)<<i;//这句话先让i自增1,<<右边的 i 是初始化的值1,所以第二句代码执行是2向左移1,
0010向左移1,变成0100,转变成十进制是4
所以最后结果是4
作者:
王俊杰
时间:
2013-3-27 21:25
本帖最后由 王俊杰 于 2013-3-27 21:27 编辑
我觉得 i 的结果是2
i++后变成了2
只不过,(i++)<<i;这一句在Eclipse里面提示错误。
我想应该有个变量来接受(i++)<<i 的值吧
i 的值变成2应该没问题。
作者:
Keith
时间:
2013-3-27 21:26
楼主代码不明确..............第二句是赋值给谁吗?如果第二句不赋给i,那i只参与了自增运算,结果2是,要是赋值给i,如3楼 为4............
作者:
邵震
时间:
2013-3-27 21:28
本帖最后由 qwe8234118 于 2013-3-27 21:34 编辑
结果是4.
过程如下:
i=1
1<<(1+1)
1的二进制表现形式是0001左移两位是0100
转换回十进制就是4所以结果是4
class java0327d5
{
public static void main(String[] args)
{
int i = 1;
System.out.println((i++)<<i);
}
}
复制代码
不知道是不是你要的答案
作者:
张昶
时间:
2013-3-27 21:29
int i=1;
i=(i++)<<i;
第一句代码执行i自增1,i 就等于2;
第二句代码执行是2向左移1,如:0010向左移1,变成0100,转变成十进制是4
作者:
陈丽莉
时间:
2013-3-27 21:44
及时追问,或改成【已解决】哦~
作者:
张洪慊
时间:
2013-3-27 21:49
//借用下qwe同学代码
class java0327d5
{
public static void main(String[] args)
{
int i = 1;
System.out.println((i++)<<i);
/*
首先明确
( i++)这个表达式的值为未自增前的i
①i++表达式的值为1
②i=i+1->i=2
③1<<2->1*2^2=4
*/
}
}
复制代码
作者:
李游
时间:
2013-3-27 21:57
个人觉得这种问题最简单的办法就是敲代码运行,完全可以自己解决啊
作者:
王俊杰
时间:
2013-3-27 22:10
哈哈哈 楼主开了个小玩笑 或者叫脑筋急转弯吧
楼主的问题是
i 的结果
,而不是
第二个语句的结果
我看不少人都去计算第二条语句啦
作者:
马日花
时间:
2013-3-27 23:16
先不管楼主的代码正不正确,就当是正确的吧。
我觉得 i 的结果是2.
原因: 在 i ++ 语句进行计算时,是先把 i 提取出来,i 再自增一次。然后运算时还是用的原来的值。所以代码(i ++)<< i 变为 1 << 2 。但楼主问的是 i 的值,所有为 i为自增后的值。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2