位运算在日常开发中不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法。因此在算法中为了减少开销,算法的复杂度有要求的情况下,位运算会起到意想不到的效果。
位运算
1.Java支持的位运算符
&:按位与。
|:按位或。
~:按位非。
^:按位异或。
<<:左位移运算符。
“>>”:右位移运算符。
<<<:无符号右移运算符。
1)按位与 &
规则总结:只有两个操作数对应位同为1时,结果为1,其余全为0. (或者是只要有一个操作数为0,结果就为0)。
2)按位或 |
规则总结:只有两个操作数对应位同为0时,结果为0,其余全为1.(或者是只要有一个操作数为1,结果就为1)。
3)按位非 ~
4)按位异或 ^
5)左位移 <<
符号位不变,低位补0。
2:10
2<<2:1000 =8
M << n = M * 2n
6)右位移 >>
低位溢出,符号位不变,并用符号位补溢出的高位。
如:-6>>2结果为-2。
这里总结一下,关于负数或者正数来说,移位的时候是一样的,但是在补位的时候,如果最高位是0就补0,如果最高位是1就补1
由此我们得出一个快速的算法 M >> n 其实可