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:位运算符
package com.bwf.sample; public class Demo1 {
public static void main(String[] args) { int a=23,b=11; int 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^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)); } }
|
执行的结果如下图所示: