Java 运算符

按位或和赋值运算符 (|=) 为第一个操作数分配一个等于两个操作数按位或运算结果的值。

(x |= y) 为等价于 (x = x | y)

按位或运算符 (|) 是一个二元运算符,它采用两个长度相等的位模式并对每对相应位执行逻辑或运算。如果同一位置的一个或两个位为 1,则返回 1,否则返回 0。

Bit_1Bit_2Bit_1 | Bit_2
000
101
011
111

下面的示例描述了按位 OR 运算符的工作原理:

50 | 25 returns 59

     50    ->    110010  (In Binary)
   | 25    ->  | 011001  (In Binary)
    ----        --------
     59    <-    111011  (In Binary) 

使用按位或运算符(|)的代码如下:

public class MyClass {
  public static void main(String[] args) {
    int x = 50;
    int y = 25;

    //按位或及赋值运算
    x |= y;

    //显示结果
    System.out.println("x = "+x);
  }
} 

上述代码的输出将是:

x = 59 

示例:求小于或等于给定数字的最大2的幂

考虑一个整数1000。在按位格式中,它可以写为1111101000。但是,这里没有写出所有位。完整的表示将是 32 位表示,如下所示:

00000000000000000000001111101000 

执行 N |= (N>>i) 操作,其中 i = 1, 2, 4, 8, 16 会将所有右侧位更改为 1。当应用于 1000 时,32 位表示的结果如下:

00000000000000000000001111111111 

此结果加一,然后将结果右移一位,将得到小于或等于 1000 的最大 2 次幂。

00000000000000000000001000000000 

下面的代码将计算小于或等于给定数字的 2 的最大幂。

public class MyClass {
  static int MaxPowerOfTwo(int N) {
    //将所有右侧位更改为1。
    N |= (N>>1);
    N |= (N>>2);
    N |= (N>>4);
    N |= (N>>8);
    N |= (N>>16);
    
    //将 1 加到 N 得到最小的幂
    //大于给定数字的 2 个
    N += 1;

    //右移一位使得
    //小于或的2的最大幂
    //等于给定数字
    N >>= 1;
    
    return N;
  }

  public static void main(String[] args) {
    System.out.println("MaxPowerOfTwo(100) = "+
        MaxPowerOfTwo(100));
    System.out.println("MaxPowerOfTwo(500) = "+
        MaxPowerOfTwo(500));
    System.out.println("MaxPowerOfTwo(1000) = "+
        MaxPowerOfTwo(1000));      
  }
} 

上面的代码将给出以下输出:

MaxPowerOfTwo(100) = 64
MaxPowerOfTwo(500) = 256
MaxPowerOfTwo(1000) = 512