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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM周一帆 中级黑马   /  2013-3-28 20:20  /  1821 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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    求解答的

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

6 个回复

倒序浏览
<<:左移运算符,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

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
看到二楼的我就跪了!你这位运算你要学到什么程度你才可以收手啊!!楼主啊!跟二楼学一下位运算吧...二楼不要说你是Integer.toBinaryString()用这个方法算的哦??我会鄙视你的哦
回复 使用道具 举报
其实,就是左移运算符相当于乘2的运算的原理

也不要884800,太恐怖了,就用8做例子,且用do-while更好理解
  1. package cty.show;

  2. public class NumInputTest {

  3.         public static void main(String[] args)
  4.         {
  5.         int x =1;
  6.         int c=0;
  7.         do{
  8.            c++;
  9.            x=1<<c;
  10.         }while(x<8);
  11.         System.out.println(c);
  12.         }//条件x<8输出3 x<9输出4
  13. }
复制代码
第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的条件,结束

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
首先我们要把这个程序的顺序搞清楚
c初始化是0,进入while之后c++=0+1
x=1<<1  也就是1的2进制 向左移动一位就是0000 0010 = 2,俩位就是0000 0100 =4
后面的以此类推 .
看到你的帖子让我想起了上课做的练习算一张纸0.01米后的纸折多少下可以比848米的喜马拉雅山高,最后得出来的结论是20,当时我们都很郁闷,哈哈

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
luguoyuanf 发表于 2013-3-28 21:34
首先我们要把这个程序的顺序搞清楚
c初始化是0,进入while之后c++=0+1
x=1

原来楼主的8848是这么个来历,我还以为疯狂了!:lol
回复 使用道具 举报
陈腾跃_2013 发表于 2013-3-29 00:37
原来楼主的8848是这么个来历,我还以为疯狂了!

一开始我也很郁闷,后来用计算器算了下还这是,嘿嘿
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马