黑马程序员技术交流社区
标题:
求解!
[打印本页]
作者:
HM周一帆
时间:
2013-3-28 20:20
标题:
求解!
本帖最后由 HM周一帆 于 2013-3-28 21:58 编辑
double x =0.01;
int c=0;
while (x<8848 ) {
c++;
x=1<<c;
}
System.out.println(c);
}
这个是一到程序题结果是14
int x =1;
int c=0;
while (x<884800 ) {
c++;
x=1<<c;
}
System.out.println(c);
}
这个结果是20 求解答的
作者:
HM张勇
时间:
2013-3-28 20:57
<<:左移运算符,1<<c代表把1的二进制数字0000 0000 0000 0001向左移动一位,末位补零。
初始值x=0.01,c=0
第一次循环:c++运算后c=1, x=1<<c后0000 0000 0000 0001变成0000 0000 0000 0010,即x=2
第二次循环:c++运算后c=2, x=1<<c后0000 0000 0000 0001变成0000 0000 0000 0100,即x=4
第三次循环:c++运算后c=3, x=1<<c后0000 0000 0000 0001变成0000 0000 0000 1000,即x=8
.....................................................................................................................................
第13次循环:c++运算后c=13, x=1<<c后0000 0000 0000 0001变成0010 0000 0000 0000,即x=8192
执行x<8848 ,8192<8848,符合循环条件,c++后c=14
第13次循环:c++运算后c=13, x=1<<c后0000 0000 0000 0001变成0100 0000 0000 0000,即x=16384
不符合条件,循环结束,所以c=14
作者:
刘胜寒
时间:
2013-3-28 21:03
看到二楼的我就跪了!你这位运算你要学到什么程度你才可以收手啊!!楼主啊!跟二楼学一下位运算吧...二楼不要说你是Integer.toBinaryString()用这个方法算的哦??我会鄙视你的哦
作者:
陈腾跃_2013
时间:
2013-3-28 21:14
其实,就是左移运算符相当于乘2的运算的原理
也不要884800,太恐怖了,就用8做例子,且用do-while更好理解
package cty.show;
public class NumInputTest {
public static void main(String[] args)
{
int x =1;
int c=0;
do{
c++;
x=1<<c;
}while(x<8);
System.out.println(c);
}//条件x<8输出3 x<9输出4
}
复制代码
第1次,c++等于1,相当于x=1*2;
第2次,c++等于2,x=1*2*2=4;
第3次,c++等于3,x=1*2*2*2=8;这时不满足x<8的条件,结束
作者:
陈腾跃_2013
时间:
2013-3-29 00:37
luguoyuanf 发表于 2013-3-28 21:34
首先我们要把这个程序的顺序搞清楚
c初始化是0,进入while之后c++=0+1
x=1
原来楼主的8848是这么个来历,我还以为疯狂了!:lol
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2