首先,解释下什么是按位运算。按位运算是指先将运算的操作数先分解成二进制位,再根据二进制位进行运算。
我们都知道,计算机只能识别二进制数1和0。因此通常来说,按位运算比普通运算效率快很多。
Java提供的常用按位运算符:
1、按位与运算符(&):
1 & 1 = 1; 1 & 0 = 0; 0 & 1 = 0; 0 & 0 = 0;即只有当参与运算的两个对应二进制位都为1的情况下结果位才为1,否则都为0,类似于逻辑与运算符&&。
2、按位或运算符(|):
1 | 1 = 1; 1 | 0 = 1; 0 | 1 = 1; 0 | 0 = 0;即只有当参与运算的两个对应二进制位都为0的情况下结果位才为0,否则都为1,类似于逻辑或运算符||。
3、按位异或运算符(^):
1 ^ 1 = 0; 1 ^ 0 = 1; 0 ^ 1 = 1; 0 ^ 0 = 0;即只有当参与运算的两个对应二进制位为异(值不同)的情况下结果位才为1,否则为0。
4、按位取反运算符(~):
~1 = 0; ~0 = 1;这是个一元运算符,按二进制位进行“取反”运算。
5、按位左移运算符(<<):
表达式:a << n
<1>a为操作数,n为左移的位数。
<2>将a的各个二进制位左移n位,相当于丢弃a中二进制位的前n位,并向a中二进制位向后补n位。
例如:2 << 2;
2的二进制表示形式为:00000010(只保留8位,前面为0的二进制位已省略);
2左移2位后为:00001000(只保留8位,前面为0的二进制位已省略);
00001000就是2左移2位后的二进制表示结果,用十进制表示为8,即2的3次方。
<3>按位左移的规律总结:
只要操作数a是2的次幂的结果,则a << n 等效于 a * 2的n次幂;例如:2 << 2 = (2 * 2的二次方) = 8
6、按位右移运算符(>>):
与按位左移运算符相反。
7、按位符合运算符:
a &= b 等效于a = a & b;
a |= b 等效于a = a | b;
a ^= b 等效于a = a ^ b;
a <<= b 等效于a = a << b;
a >>= b 等效于a = a >> b;
这些用法类似于java中的“+=”、“-=”、“*=”、“/=”等复合运算符。