本帖最后由 ol_beta 于 2010-08-21 14:22:05 编辑

解决方案 »

  1.   

    i >> shift
    由于 shift = 5,因此 i >> shift 表示 i / 32。PS:求解,想求解什么?
      

  2.   

    ~表示按位取反
    a |= b 表示 a = a | b
      

  3.   

    <<,>>,|,~,&都是位操作符。而且与普通运算符+,-等一样,可以组合为+=一样1 左移和右移,可以理解为小数点在移动。由于计算机是二进制的,所以移动的是2的整数倍。其他与小数点完全一样:左移,就是扩大2的整数倍,右移缩小2的整数倍。
      因此,a << b 就是 a * (2 ^ b),即a乘以2的b次方
        a >> b就是a / (2^b) 即b除以2的b此方
       这个和十进制的小数点左右移动非常相像,这里不是10的倍数,而是2的倍数。就这点区别2 |,&,~ 按位或,与,非。  把数字按照二进制的每一位进行与或非。法则按照真值表来做。非常简单。
       
       java中这种运算用的不多,但是在嵌入式领域或系统程序中,c/C++的按位操作非常多,往往用来访问某个硬件的寄存器或地址,非常强大。java不能访问内存,但也保留了这些按位逻辑运算符,可能是为了语言的完备性吧。