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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ccsd999 中级黑马   /  2015-4-28 22:58  /  489 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.  设以下是应用程序中定义的方法printBinary,若在其main方法中有方法调用语句printBinary(2),则输出的结果是 (   )。
static voidprintBinary(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

5 个回复

倒序浏览
本帖最后由 鸡脑壳 于 2015-4-28 23:27 编辑

B把
这里是说,int类型的 1 左移 j 位然后与输入值相比较确认输入值的第 j 位上有没有数据,有则输出
int是32位数据所以
int 1  在存储时是:   0000 0000 0000 0000 0000 0000 0000 0001
for第一步 1<<j , j = 31 所以把上面的二进制数左移31位得到:
                                 1000 0000 0000 0000 0000 0000 0000 0000然后用这个值与传进来的值做 位与 的运算,
如果不等于 0 说明 1 所在的哪一位上有数值
则输出一个 1
如果等于零 说明 1 所在的哪一位上没有值
则输出一个 0
循环下来就得到了输入值的二进制表达式

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

回复 使用道具 举报
楼上正解,计算默认是int数据类型作的运算,其实可以看作是将输入的整数转换成2进制数,从最高位起遍历每一位与1作与位运算,同为1就输出1,不同就输出0,以打印输出
回复 使用道具 举报
这个题很明显选b啊 就是模拟计算机底层的二进制运算嘛
回复 使用道具 举报
我怎么算的是输出0.。
回复 使用道具 举报
fc389119336 发表于 2015-4-29 08:10
我怎么算的是输出0.。

我刚开始也以为是1或0;
其实我们的运算是看懂的就输出没看懂?他的意思是不等于零就打印1不换行等于零就打印0也不换行,
楼上仔细看下就知道了,for循环32次就左移一位时打印1其余都是零?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马