Java 运算符

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

(x <<= y)等价于 (x = x << y)

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

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

1000 << 2 returns 4000

                      (In Binary)
   1000         ->    1111101000  
   << 2                     |  left shift the bits
   -----                    V  by 2 places
   4000         <-  111110100000 
                      (In Binary) 

使用左移运算符(<<)的代码如下:

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

    //左移赋值操作
    x <<= 2;

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

上述代码的输出将是:

x = 4000

示例:统计正整数中 1 位的个数

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

00000000000000000000001111101000  

在任何位上与 1 进行按位 AND 运算,如果该位为 1,则结果为 1;如果该位为 0,则结​​果为 0。对每一位进行操作,并计算 1 的个数,得出给定正整数中 1 位的计数。要实现此按位左移赋值运算符,可以使用如下例所示:

public class MyClass {
  static int CountOneBits(int n) {
    int mask = 1;
    int count = 0;
    
    //按位与运算
    //数字的每一位
    for(int i = 0; i < 32; ++i) { 
      if((mask & n) == mask) 
        count++;
      mask <<= 1;
    }
    return count;
  }

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

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

CountOneBits(1000) = 6
CountOneBits(1023) = 10