Java位运算符怎么用?

文章导读
Previous Quiz Next Java 位运算符用于在二进制(位)级别执行操作。这些运算符作用于数字的单个位。它们常用于低级编程、加密和性能优化。
📋 目录
  1. Java 位运算符列表
  2. 示例 1
  3. 示例 2
  4. 示例 3
A A

Java - 位运算符



Previous
Quiz
Next

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

在这个示例中,我们创建了两个变量 ab,并使用了 按位运算符。我们执行了左移、右移和无符号右移操作,并打印了结果。

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