前言
位运算符主要针对二进制位进行运算,由于计算机的数据都是以二进制存储的,所以位运算的效率极高。
位运算主要包括了:“与”,“或”,“非”,“异或”。
一、Java 位运算:与(&)
在 Java 中与运算用符号“&”表示,其运算规则描述如下:
两个操作数对应位置的位都为1,结果才为1,否者结果为0
代码演示如下:
public class BitwiseOperation {
public static void main(String[] args){
int a = 13;
int b = 17;
//与(都是1为1,其它为0)
int c = a & b;
printNum(a);
printNum(b);
System.out.println();
printNum(c);
}
/**
* 输出此数字及其32位二进制字符串
* @param num
*/
public static void printNum(int num){
StringBuilder numStr = new StringBuilder(Integer.toBinaryString(num));
while (numStr.length() < 32){
numStr.insert(0, "0");
}
System.out.println(num + "\t\t" + numStr);
}
}
输出结果如下:
13 00000000000000000000000000001101
17 00000000000000000000000000010001
1 00000000000000000000000000000001
二、Java 位运算:或(|)
在 Java 中或运算用符号“|”表示,其运算规则描述如下:
两个操作数对应位置的位只要有一个为1,结果就为1,两个位都为0结果为0
代码演示如下:
public class BitwiseOperation {
public static void main(String[] args){
int a = 13;
int b = 17;
//或(只要有一个是1就为1,都是0为0)
int d = a | b;
printNum(a);
printNum(b);
System.out.println();
printNum(d);
}
/**
* 输出此数字及其32位二进制字符串
* @param num
*/
public static void printNum(int num){
StringBuilder numStr = new StringBuilder(Integer.toBinaryString(num));
while (numStr.length() < 32){
numStr.insert(0, "0");
}
System.out.println(num + "\t\t" + numStr);
}
}
输出结果如下:
13 00000000000000000000000000001101
17 00000000000000000000000000010001
29 00000000000000000000000000011101
三、Java 位运算:非(~)
在 Java 中非运算用符号“~”表示,其运算规则描述如下:
操作数位为1,结果为0,位为0,结果为1
代码演示如下:
public class BitwiseOperation {
public static void main(String[] args){
int a = 13;
//非(是1为0,是0为1)
int e = ~ a;
printNum(a);
System.out.println();
printNum(e);
}
/**
* 输出此数字及其32位二进制字符串
* @param num
*/
public static void printNum(int num){
StringBuilder numStr = new StringBuilder(Integer.toBinaryString(num));
while (numStr.length() < 32){
numStr.insert(0, "0");
}
System.out.println(num + "\t\t" + numStr);
}
}
输出结果如下:
13 00000000000000000000000000001101
-14 11111111111111111111111111110010
四、Java 位运算:异或(^)
在 Java 中异或运算用符号“^”表示,其运算规则描述如下:
两个操作数位相同,结果为0,位不同,结果为1
代码演示如下:
public class BitwiseOperation {
public static void main(String[] args){
int a = 13;
int b = 17;
//异或(相同为0,不同为1)
int f = a ^ b;
printNum(a);
printNum(b);
System.out.println();
printNum(f);
}
/**
* 输出此数字及其32位二进制字符串
* @param num
*/
public static void printNum(int num){
StringBuilder numStr = new StringBuilder(Integer.toBinaryString(num));
while (numStr.length() < 32){
numStr.insert(0, "0");
}
System.out.println(num + "\t\t" + numStr);
}
}
输出结果如下:
13 00000000000000000000000000001101
17 00000000000000000000000000010001
28 00000000000000000000000000011100