位运算符是在Java语言中主要是针对二进制数进行一系列的位运算操作的符号,当然,在Java中,位运算符也可以同整型数据类型配合使用,常用的包括以下几种运算符:按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移位(<<)、有符号右移位(>>)、无符号右移位(>>>)。
一、按位与运算符(&)
&运算符可以理解成两个数的按位“与”操作。两个操作数中对应的二进制位都为1时,结果对应的二进制位的值才为1,否则为0。因此,按位与运算符通常用于一些位操作,比如将某些位清除为0,保留其他位。
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c );
}
二、按位或运算符(|)
|运算符可以理解成两个数的按位“或”操作。两个操作数中对应的二进制位都为0时,结果对应的二进制位的值才为0,否则为1。通常用于一些位操作,比如将某些位设置为1。
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
}
三、按位异或运算符(^)
^运算符可以理解成两个数的按位“异或”操作。两个操作数中对应的二进制位相同时,结果对应的二进制位的值为0,否则为1。通常用于一些位操作,比如将某些位取反。
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c );
}
四、按位取反运算符(~)
~运算符是一元运算符,对操作数的每一个二进制位取反。即把0变为1,把1变为0。通常用于一些位操作,比如将某些位取反。
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = ~a; /* -61 = 1100 0011 */
System.out.println("~a = " + b );
}
五、左移位运算符(<<)
左移位运算符是在操作数的二进制位上,把每一个二进制位向左移动指定的位数。左移后,低位补0,高位舍弃。
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + b );
}
六、右移位运算符(>>)
右移位运算符是在操作数的二进制位上,把每一个二进制位向右移动指定的位数。右移后,高位补符号位,因为Java中采用的是有符号数补码表示。
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = a >> 2; /* 15 = 0000 1111 */
System.out.println("a >> 2 = " + b );
}
七、无符号右移位运算符(>>>)
无符号右移位运算符是在操作数的二进制位上,把每一个二进制位向右移动指定的位数。右移后,高位补0,因为Java中采用的是无符号数原码表示。
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = a >>> 2; /* 15 = 0000 1111 */
System.out.println("a >>> 2 = " + b );
}
为了更好的理解Java中的位运算符,以下是一些常见的运算示例:
public static void main(String[] args) {
int a = 8; // 二进制:0000 1000
int b = 5; // 二进制:0000 0101
int or = a | b; // 13,二进制:0000 1101
int and = a & b; // 0,二进制:0000 0000
int xor = a ^ b; // 13,二进制:0000 1101
int not = ~a; // -9,二进制:1111 0111
int shiftLeft = a << 2; // 32,二进制:0010 0000
int shiftRight = a >> 2; // 2,二进制:0000 0010
int shiftRightZ = a >>> 2;// 2,二进制:0000 0010
}
以上示例仅仅是位运算符的一个简单应用,在实际开发中,还有很多更加复杂的场景需要使用。