Java 按位运算符

Java教程 - Java按位运算符


按位操作符作用于其操作数的各个位。Java按位运算符可以应用于整数types: long,int,short,char,byte

按位运算符列表

下表列出了所有Java按位运算符。

运算符 结果
~ 按位一元NOT
& 按位AND
| 按位或
^ 按位异或
>> 向右移动
>>> 右移零填充
<< 向左移动
&= 按位AND分配
|= 按位OR分配
^= 按位异OR分配
>>= 右移赋值
>>>= 右移零填充分配
<<= 向左移位

按位运算符分配将赋值与按位运算组合。以下两个语句是等效的:

a = a >> 4; 
a >>= 4;  

以下两个语句是等效的:

a = a | b; 
a |= b;

以下程序演示了按位运算符分配:

 
public class Main {
  public static void main(String args[]) {
    int a = 1;
    int b = 2;
    int c = 3;
    a |= 2;
    b >>= 2;
    c <<= 2;
    a ^= c;
    System.out.println("a = " + a);
    System.out.println("b = " + b);
    System.out.println("c = " + c);

  }
}

此程序的输出如下所示:


Java左移运算符

左移位算子,<<移位所有位中的一个值到左边一个指定的数字的时间。

它有这种一般形式:

value << num

以下代码移位字节类型变量。

 
public class Main {
  public static void main(String args[]) {
    byte a = 64, b;
    int i;
    i = a << 2;
    b = (byte) (a << 2);
    System.out.println("Original value of a: " + a);
    System.out.println("i and b: " + i + " " + b);
  }
}

此程序生成的输出如下所示:


例子

每个左移具有使原始值加倍的效果。以下程序说明了这一点:

 
public class Main {
  public static void main(String args[]) {
    int num = 0xFFFFFFF;

    for (int i = 0; i < 4; i++) {
      num = num << 1;
      System.out.println(num);

    }
  }
}

程序生成以下输出:

Java右移运算符

右移位运算符>> 将值中的所有位向右移a指定次数。

其一般形式如下所示:

value >> num

num 指定要向右移位的位置数。

以下代码段将值 32 向右移两个位置:

 public class Main {
  public static void main(String[] argv) {

    int a = 32;
    a = a >> 2;
    System.out.println("a is " + a);

  }
}

输出:

Java无符号右移

Java无符号,右移运算符,>>> ,始终将零转移到高阶位。

其一般形式如下所示:

value >>> num

num 指定要向右移位的位置数。

以下代码显示如何使用无符号右移。

public class Main {
  public static void main(String[] argv) {
    int a = -1;
    a = a >>> 24;

    System.out.println("a is " + a);
  }
}

输出: