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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

14.        设以下是应用程序中定义的方法printBinary,若在其main方法中有方法调用语句printBinary(2),则输出的结果是 (  D )。
static void printBinary(int i) {
        System.out.print(i + "的2进制数表示为:\t");
        for(int j = 31; j >=0; j--)
            if(((1 << j) &  i) != 0)
                System.out.print("1");
            else
                System.out.print("0");
        System.out.println();
  }
A) 00000000000000000000000000000001
B) 00000000000000000000000000000010       
C) 00000000000000000000000000001111
D) 00000000000000000000000000000000

10 个回复

倒序浏览
太难了啊
回复 使用道具 举报
打印二进制,不应该选B么?
回复 使用道具 举报 1 0


楼主坑爹呢吧,明明是B,你干嘛标D呢
回复 使用道具 举报
应该是B/////
回复 使用道具 举报
本帖最后由 唱一些温暖 于 2015-12-30 15:21 编辑

((1 << j) &  i) != 0
因为是在循环内的,j是变化的明白的吧,那么1<<j也是变化的
1的二进制是          0000-0000 0000-0000 0000-0000 0000-0001
1<<31的二进制是  1000-0000 0000-0000 0000-0000 0000-0000
i=2;
(1 << 31) &2  第一次
1000-0000 0000-0000 0000-0000 0000-0000
0000-0000 0000-0000 0000-0000 0000-0010
------------------------------------------------------&运算,只有都为1时返回1,其他返回0
0000-0000 0000-0000 0000-0000 0000-0000   结果为0

只有当((1 << j) &i)不等于0才打印1,就是1<<j=2时,即j=1时。
0000-0000 0000-0000 0000-0000 0000-0010     1<<1=2
0000-0000 0000-0000 0000-0000 0000-0010     2
------------------------------------------------------&运算,只有都为1时返回1,其他返回0
0000-0000 0000-0000 0000-0000 0000-0010   结果为2,(2!=0)返回true

然后再循环j=0,1<<0=1,1&2=0,(0!=0)=flase,打印0.

B正确。
回复 使用道具 举报
李永佳 发表于 2015-12-30 14:51
楼主坑爹呢吧,明明是B,你干嘛标D呢

不是意思 ,D 是我自己选的  ,虽然能打印结果,但我看不懂
回复 使用道具 举报
until 中级黑马 2015-12-30 22:05:02
8#
太难了   加油啊   .....
回复 使用道具 举报
yifuyue 来自手机 中级黑马 2015-12-30 22:06:03
9#
看不懂!!!!
回复 使用道具 举报
其实已经告诉你了!2进制数用算吗?
回复 使用道具 举报
n_Nie1991 发表于 2015-12-30 21:52
不是意思 ,D 是我自己选的  ,虽然能打印结果,但我看不懂

就是问你2的二进制是多少,这有什么难得,下面那个方法不看都没事儿
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马