Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - 位运算符及示例



Java 定义了几个位运算符,这些运算符可以应用于整数类型,如 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

下表列出了位运算符:

假设整数变量 A 为 60,变量 B 为 13,则:

运算符 描述 示例
& (按位与) 二进制 AND 运算符将位复制到结果中,如果它存在于两个操作数中。 (A & B) 将得到 12,即 0000 1100
| (按位或) 二进制 OR 运算符复制一个位,如果它存在于任何一个操作数中。 (A | B) 将得到 61,即 0011 1101
^ (按位异或) 二进制 XOR 运算符复制一个位,如果它在一个操作数中设置但不在两个操作数中都设置。 (A ^ B) 将得到 49,即 0011 0001
⁓ (按位取反) 二进制一补码运算符是单目运算符,其作用是“翻转”位。 (⁓A) 将得到 -61,由于带符号二进制数,因此在 2 的补码形式中为 1100 0011。
<< (左移) 二进制左移运算符。左操作数的值向左移动由右操作数指定的位数。 A << 2 将得到 240,即 1111 0000
>> (右移) 二进制右移运算符。左操作数的值向右移动由右操作数指定的位数。 A >> 2 将得到 15,即 1111
>>> (零填充右移) 右移零填充运算符。左操作数的值向右移动由右操作数指定的位数,并用零填充移位的值。 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
java_basic_operators.htm
广告