您的位置:

Java位运算符详解

在Java中,位运算符是对二进制位进行操作的运算符。位运算符可用于位操作,位操作可以用于优化计算机程序的处理速度。

一、位运算符的种类

Java中共有6个位运算符:

  • & 按位与:对两个数的二进制进行按位与操作,只有都为1时,结果才为1。
  • | 按位或:对两个数的二进制进行按位或操作,只要有一个为1时,结果就为1。
  • ^ 按位异或:对两个数的二进制进行按位异或操作,不同为1,相同为0。
  • ~ 按位取反:对一个数的二进制进行按位取反,0变为1,1变为0。
  • > 右移:将一个数的二进制按照指定位数向右移动,超出部分舍弃,空位以符号位补位。
  • << 左移:将一个数的二进制按照指定位数向左移动,超出部分舍弃,空位补0。

二、位运算符的作用

位运算符常用于以下场景:

  1. 将整数转换为二进制或十六进制
  2.     int num = 10;
        //输出二进制形式
        System.out.println(Integer.toBinaryString(num));
        //输出十六进制形式
        System.out.println(Integer.toHexString(num));
        
  3. 对整数进行快速除法或乘法计算
  4.     //等同于num*2^3
        int result = num << 3;
        //等同于num/2^3
        int result = num >> 3;
        
  5. 对数字的某些位进行操作
  6.     //将num的第2位设置为1
        int result = num | 0b10;
        //将num的第4位设为0
        int result = num & ~0b1000;
        

三、注意事项

位运算符操作的对象必须是整型(byte、short、int、long),不能用于浮点型。

对于<<和>>运算,若左操作数是int类型,则移动1~31位的结果为int类型;若左操作数是long类型,则移动1~63位的结果为long类型。

对于>>>运算(无符号位移运算),一律将空缺处补0,即使最左边一位是1也不例外(因此Java不支持无符号整数类型)。

四、实例演示

public class BitwiseOperatorDemo {
    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 );
        c = a ^ b; /* 49 = 0011 0001 */
        System.out.println("a ^ b = " + c );
        c = ~a; /*-61 = 1100 0011 */
        System.out.println("~a = " + c );
        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 );
    }
}