本帖最后由 唱一些温暖 于 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正确。
|