黑马程序员技术交流社区
标题: 这题真心没看懂,求解答 [打印本页]
作者: ccsd999 时间: 2015-4-28 22:58
标题: 这题真心没看懂,求解答
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
作者: 鸡脑壳 时间: 2015-4-28 23:24
本帖最后由 鸡脑壳 于 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
循环下来就得到了输入值的二进制表达式
作者: Chans_宇 时间: 2015-4-29 01:05
楼上正解,计算默认是int数据类型作的运算,其实可以看作是将输入的整数转换成2进制数,从最高位起遍历每一位与1作与位运算,同为1就输出1,不同就输出0,以打印输出
作者: wnk77521 时间: 2015-4-29 02:27
这个题很明显选b啊 就是模拟计算机底层的二进制运算嘛
作者: fc389119336 时间: 2015-4-29 08:10
我怎么算的是输出0.。
作者: 海带 时间: 2015-4-29 08:51
我刚开始也以为是1或0;
其实我们的运算是看懂的就输出没看懂?他的意思是不等于零就打印1不换行等于零就打印0也不换行,
楼上仔细看下就知道了,for循环32次就左移一位时打印1其余都是零?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |