Java - 位运算符
Java 位运算符用于在二进制(位)级别执行操作。这些运算符作用于数字的单个位。它们常用于低级编程、加密和性能优化。
Java 定义了多种位运算符,可应用于 integer 类型,包括 long、int、short、char 和 byte。
位运算符作用于位并执行逐位操作。假设 a = 60,b = 13;它们的二进制格式如下 −
a = 0011 1100 b = 0000 1101 a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
Java 位运算符列表
下表列出了位运算符 −
假设整数变量 A 值为 60,变量 B 值为 13,那么 −
| 运算符 | 描述 | 示例 |
|---|---|---|
| & (bitwise and) | 二进制 AND 运算符将位复制到结果中,前提是该位同时存在于两个操作数中。 | (A & B) 的结果为 12,即 0000 1100 |
| | (bitwise or) | 二进制 OR 运算符复制存在于任一操作数中的位。 | (A | B) 的结果为 61,即 0011 1101 |
| ^ (bitwise XOR) | 二进制 XOR 运算符复制仅在一个操作数中设置的位。 | (A ^ B) 的结果为 49,即 0011 0001 |
| ⁓ (bitwise compliment) | 二进制按位取反运算符是一元运算符,其效果是“翻转”位。 | (⁓A ) 的结果为 -61,由于是有符号二进制数,在 2 的补码形式下为 1100 0011。 |
| << (left shift) | 二进制左移运算符。左操作数的数值向左移动右操作数指定的位数。 | A << 2 的结果为 240,即 1111 0000 |
| >> (right shift) | 二进制右移运算符。左操作数的数值向右移动右操作数指定的位数。 | A >> 2 的结果为 15,即 1111 |
| >>> (zero fill right shift) | 右移补零运算符。左操作数的数值向右移动右操作数指定的位数,移位后用零填充。 | A >>>2 的结果为 15,即 0000 1111 |
以下程序是演示位运算符的简单示例。将以下 Java 程序复制并粘贴到 Test.java 文件中,编译并运行程序 −
示例 1
在本示例中,我们创建了两个变量 a 和 b,并使用了 位运算符。我们执行了位 AND 和位 OR 操作,并打印了结果。
public class Test {
public static void main(String args[]) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c );
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
}
}
输出
a & b = 12 a | b = 61
示例 2
在本示例中,我们创建了两个变量 a 和 b,并使用了 位运算符。我们执行了位 XOR 和取反操作,并打印了结果。
public class Test {
public static void main(String args[]) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c );
c = ~a; /*-61 = 1100 0011 */
System.out.println("~a = " + c );
}
}
输出
a ^ b = 49 ~a = -61
示例 3
在这个示例中,我们创建了两个变量 a 和 b,并使用了 按位运算符。我们执行了左移、右移和无符号右移操作,并打印了结果。
public class Test {
public static void main(String args[]) {
int a = 60; /* 60 = 0011 1100 */
int c = 0;
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c );
c = a >> 2; /* 15 = 1111 */
System.out.println("a >> 2 = " + c );
c = a >>> 2; /* 15 = 0000 1111 */
System.out.println("a >>> 2 = " + c );
}
}
输出
a << 2 = 240 a >> 2 = 15 a >>> 2 = 15