java支持对整型(char、short、int、long)数据直接进行位操作运算,已提高运算效率。
逻辑位运算符
与位运算符
&
,使用示例:a = b & c;
或位运算符|
,使用示例:a = b | c;
取反运算符~
,使用示例: a = ~b; 两次取反数据可以还原
异或运算符^
,使用示例:a = b ^ c; 两次异或同一个数可以还原数据,该特性可以加密图片
移位运算符
左移运算符
<<
,将全部二进制位向左移动若干位,高位丢弃,低位补0;
右移运算:
算术右移运算符>>
,将全部二进制位向右移动若干位,低位丢弃,高位补最高位;
逻辑右移运算符>>>
,将全部二进制位向右移动若干位,低位丢弃,高位补0;
右移运算符正数的两种结果是一致的,负数结果最高位补齐的方法的差异导致结果不一样。
位运算操作示例代码
public void printBitOperator() {
int a = 0xa9a9a9a9;
int b = 0x5a5a5a5a;
//10101001 10101001 10101001 10101001
System.out.println(Integer.toBinaryString(a));
//10100110 10100110 10100110 101001 00
System.out.println(Integer.toBinaryString(a<<2));
//11 101010 01101010 01101010 01101010
System.out.println(Integer.toBinaryString(a>>2));
//00 101010 01101010 01101010 01101010
System.out.println(Integer.toBinaryString(a>>>2));
//01011010 01011010 01011010 01011010
System.out.println(Integer.toBinaryString(b));
//01101001 01101001 01101001 011010 00
System.out.println(Integer.toBinaryString(b<<2));
//00 010110 10010110 10010110 10010110
System.out.println(Integer.toBinaryString(b>>2));
//00 010110 10010110 10010110 10010110
System.out.println(Integer.toBinaryString(b>>>2));
}
public void exchangeNum() {
int a = 10;
int b = 11;
//中间变量交换两个数的值,优点代码通俗易懂,缺点需要引入新的变量
int temp = a;
a = b;
b = temp;
//相加法交换两个数,一般不推荐用,两数相加时存在溢出的可能,溢出会丢失数据精度
a = a + b;
b = a - b;
a = a - b;
//异或法交换两个数,优点是操作效率高,不需要引入新的变量,缺点代码逻辑不清晰,只能操作整型数据
a = a ^ b;
b = a ^ b;
a = a ^ b;
}