黑马程序员技术交流社区

标题: 下面这道题关于位运算的,好难啊看不懂,哪位大神帮我解释下 [打印本页]

作者: n_Nie1991    时间: 2015-12-29 23:11
标题: 下面这道题关于位运算的,好难啊看不懂,哪位大神帮我解释下
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


作者: s616622575    时间: 2015-12-29 23:44
太难了啊
作者: ConsciousStream    时间: 2015-12-30 14:19
打印二进制,不应该选B么?
作者: 李永佳    时间: 2015-12-30 14:51


楼主坑爹呢吧,明明是B,你干嘛标D呢

作者: 唐洪超    时间: 2015-12-30 15:06
应该是B/////
作者: 唱一些温暖    时间: 2015-12-30 15:15
本帖最后由 唱一些温暖 于 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正确。

作者: n_Nie1991    时间: 2015-12-30 21:52
李永佳 发表于 2015-12-30 14:51
楼主坑爹呢吧,明明是B,你干嘛标D呢

不是意思 ,D 是我自己选的  ,虽然能打印结果,但我看不懂
作者: until    时间: 2015-12-30 22:05
太难了   加油啊   .....
作者: yifuyue    时间: 2015-12-30 22:06
看不懂!!!!
作者: Accoss-x    时间: 2015-12-31 00:27
其实已经告诉你了!2进制数用算吗?
作者: 李永佳    时间: 2015-12-31 10:32
n_Nie1991 发表于 2015-12-30 21:52
不是意思 ,D 是我自己选的  ,虽然能打印结果,但我看不懂

就是问你2的二进制是多少,这有什么难得,下面那个方法不看都没事儿




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2