i=0000 0100
当j=3时((1 << j) &  i) != 0
其他时候((1 << j) &  i) = 0可以用于逻辑控制。

解决方案 »

  1.   

    i=65=0000 0000 0100 0001
        for(int j = 31; j >= 0; j--)
          if(((1 << j) &  i) != 0)                              
            System.out.print("1");
          else
            System.out.print("0");
    当j=31时  j=0000 0000 0001 1111
       1 << j的值                  (1 << j) &  i的值                      显示
     0000 0000  0011 1110        0000 0000 0011 1110
                                 0000 0000 0100 0001 
                              ---------------------------------
                                 0000 0000 0000 0000       对吗?           0
    -------------------------------------------------------------
    第二次循环,j是变为30,还是62-1=61呢?
    --------------------------------------------------
    i=59081716
       00000011100001011000001111110100
    当j=31时   j=0000 0000 0001 1111
       1 << j的值                                    (1 << j) &  i的值                          显示
     0000 0000 0000 0000 0000 0000  0011 1110  \\0000 0000 0000 0000  0000 0000 0011 1110 \
                                                 0000 0011 1000 0101  1000 0011 1111 0100
                                               ----------------------------------------------
                                                 0000 0000 0000 0000  0000 0000 0011 0100 
                                                           这个结果也不为(!= 0)呀  应该显示“1”,还是应该显示“0”?
      

  2.   

    楼主理解错了1<<j

    0000 0000 0000 0000 0000 0000  0000 0001 左移j 位
    不是j左移1位