Java 运算符

按位右移运算符 (>>) 获取两个数字,并将第一个操作数的位右移第二个操作数指定的位数。例如:要将x位右移y位,可以使用表达式(x>>y)。它相当于x除以2y

下面的示例描述了如何右移运算符的工作原理:

1000 >> 2 returns 250

                      (In Binary)
   1000         ->    1111101000  
   >> 2                     |  right shift the bits
   -----                    V  by 2 places
    250         <-      11111010 
                      (In Binary) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

使用右移运算符(>>)的代码如下:

public class MyClass {
  public static void main(String[] args) {
    int x = 1000;
    int z;

    //右移操作
    z = x >> 2;

    //显示结果
    System.out.println("z = "+z);
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

上述代码的输出将是:

z = 250
  • 1

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

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

00000000000000000000001111101000  
  • 1

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

00000000000000000000001111111111 
  • 1

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

00000000000000000000001000000000 
  • 1

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

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

    //右移一位使得
    //小于或的2的最大幂
    //等于给定数字
    N = 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));      
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

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

MaxPowerOfTwo(100) = 64
MaxPowerOfTwo(500) = 256
MaxPowerOfTwo(1000) = 512
  • 1
  • 2
  • 3