Java位运算符有:&按位与,|按拉或,^按位异或,~按位取反,<<左移位,>>右移位,>>>右移位。下面以23和11作为操作数来演示:
运算符
规则
十进制
二进制
&按位与
两个操作数的二进位都为1结果为,否则为0
23
0001 0111
11
0000 1011
3
0000 0011
|按位或
两个操作数的二进位只要有1位为1结果为,否则为0
23
0001 0111
11
0000 1011
31
0001 1111
^按位异或
两个操作数的二进位相同为0,不同为1
23
0001 0111
11
0000 1011
28
0001 1100
~按位取反
是一个单目运算符,结果是将该数的二进制位取反
23
0001 0111
-24
1110 1000
<<左移位
将左操作数二进制位左移右操作数位数
23
0001 0111
2
92
0101 1100
>>右移位
将左操作数二进制位右移右操作数位数
23
0001 0111
2
5
0000 1011
>>右移位
将左操作数二进制位右移右操作数位数
23
0001 0111
2
5
0000 1011
>>>右移位
将左操作数二进制位右移右操作数位数,左边符号位以0补上
-24
1 {27个1} 1110 1000
1
2147483636
0 {27个1} 1111 0100
示例1:位运算符
packagecom.bwf.sample;
publicclassDemo1{
publicstaticvoidmain(String[]args) {
inta=23,b=11;
intc;
c=a&b;
System.out.println(String.format("%d & %d = %d",a,b,c));
c=a|b;
System.out.println(String.format("%d | %d = %d",a,b,c));
c=a^b;
System.out.println(String.format("%d ^ %d = %d",a,b,c));
c=~a;
System.out.println(String.format("~%d = %d",a,c));
c=a<<2;
System.out.println(String.format("%d << 2 = %d",a,c));
c=a>>2;
System.out.println(String.format("%d >> 2 = %d",a,c));
c=-24>>>1;
System.out.println(String.format("%d >>> 2 = %d",a,c));
}
}
执行的结果如下图所示: