您的位置:

Java位运算符详解

位运算符是在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
}

以上示例仅仅是位运算符的一个简单应用,在实际开发中,还有很多更加复杂的场景需要使用。