Java支持的位运算符:
&:按位与。
|:按位或。
~:按位非。
^:按位异或。
<<:左位移运算符。
>>:右位移运算符。
<<<:无符号右移运算符。
这四个运算符比较常见,也比较简单总结如下表所示:
第一个运算符 | 第二个运算符 | 按位与 | 按位或 | 按位异或 |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
PS:对于异或运算符大家可能觉得不太容易记忆(记是永远记不住的),其实前人早就总结了异或的规律,如下所述。
异或:又称半加法运算,例如1异或1可以当成二进制下的1+1=10然后取最后一位,正好是异或的结果,0+0、1+1、0+1同理。
运算原理:
前四种位运算符是比较简单的,只需要按位进行逻辑运算即可例如5&9(结果为1)的执行过程如下:
再比如~-5(结果为4)的执行过程如下:
其他运算(|、~、^)同理。
后面的移位运算相对前面的有些复杂,但是细细研究还是很好理解的。
-5<<2(结果为-20)的执行过程如下:
-5>>2执行过程如下:
-5>>>2的运算过程
通过上面的过程可以看出,只要被移位的二进制码没有发生有效位的数字丢失(对于正数而言,通常指被移出的位全部都是0),不难发现左移n位就相当于乘以2的n次方,右移则是处以2的n次方。还有一点就是进行移位运算不会改变操作数本身,它只是得到了一个新的运算结果,而原来的操作数本身是不会发生改变的。