Java 定义的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括 long,int,short,char 和 byte。
主要用来对操作数二进制的位进行运算。
位运算符分为位逻辑运算符和位移运算符两类:
1.位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)
运算规则
&:低位对齐,高位不足的补0,如果对应的二进制位同时为 1,那么该位的计算结果才为 1,否则都为 0。
| :低位对齐,高位不足的补0。如果对应的二进制位只要有一个为 1,那么结果就为 1。
^:低位对齐,高位不足的补0,如果对应的二进制位相同为0,不同为1。
~:将操作数二进制中的 1 改为 0,0 改为 1。
注:
&&与&不同,前者为短路与,后者为逻辑与,
A&&B,若A为假,则不计算B;A&B则不是依然计算B(前者更优)
||与|不同,前者为短路或,后者为逻辑或,
A||B,若A为真,则不计算B;A|B则不是依然计算B(前者更优)
且&&比||的优先级更高 , A && B || C 是先计算A&&B,结果再||C。
2.位移运算符包含2个:>>(右移) , <<(左移)
>>:相当与/2
按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补0(负数的情况下就是补1)。
<<:相当与*2
按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补0。
注:
>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。