Java语言提供了7个位操作运算符。这些运算符只能用于整型操作数,这些整数操作数包括long,int,short,char和byte。这里注意,相对于C/C++,Java多了一个位运算符“>>>”,整型操作数也多了一个byte类型(C/C++中没有byte类型整数),并且操作数没有unsigned类型整数,这需要注意。
下面是Java位操作运算符列表,其中运算符优先级为从上到下递减,但<<,>>,>>>优先级相同。
操作符 | 功能 | 用法 |
~ | 位求反 | ~expr |
<< | 左移 | expr1 << expr2 |
>> | 带符号右移,左边空出的位以原来最左边的0或者1填充 | expr1 >> expr2 |
>>> | 无符号右移,即左边空出的位以0填充 | expr1 >>>expr2 |
& | 位与 | expr1 & expr2 |
^ | 位异或 | expr1 ^ expr2 |
| | 位或 | expr1 | expr2 |
代码示例如下:
1 public class BitOperation { 2 public static void main(String[] args) { 3 int x = 3 ,y = 5 ,z =- 5 ; 4 System.out.println( " ~z= " + ( ~ z)); 5 System.out.println( " x&y= " + (x & y)); 6 System.out.println( " x^y= " + (x ^ y)); 7 System.out.println( " x|y= " + (x | y)); 8 System.out.println( " z<<1= " + (z << 1 )); 9 System.out.println( " z>>1= " + (z >> 1 )); 10 System.out.println( " z>>>1= " + (z >>> 1 )); 11 } 12 }
运行结果如下:
~z=4
x&y=1
x^y=6
x|y=7
z<<1=-10
z>>1=-3
z>>>1=2147483645
对于前四个结果,我不再做解释,可参考我的博文“位运算符(一):C/C++位运算符”。对于后三个结果,我的解释如下:
z=-5,补码表示为(11111111 11111111 11111111 11111011)
11111111 11111111 11111111 11111011 <<1
= 11111111 11111111 11111111 11110110
11111111 11111111 11111111 11111011 >>1
= 11111111 11111111 11111111 11111101
11111111 11111111 11111111 11111011 >>>1
= 01111111 11111111 11111111 11111101
From:http://www.cnblogs.com/thujason/archive/2010/07/08/1773535.html