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