按位左移运算符 (<<) 获取两个数字,并将第一个操作数的位左移第二个操作数指定的位数。例如:要将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)
使用左移运算符(<<)的代码如下:
<?php
$x = 1000;
$z;
//左移操作
$z = $x << 2;
//显示结果
echo "z = $z";
?>
上述代码的输出将是:
z = 4000
示例:统计正整数中 1 位的个数
考虑一个整数 1000。按位格式可以写为 1111101000。但是,并不是所有位都写成这里。完整的表示将是 32 位表示,如下所示:
00000000000000000000001111101000
在任何位上与 1 进行按位 AND 运算,如果该位为 1,则结果为 1;如果该位为 0,则结果为 0。对每一位进行操作,并计算 1 的个数,得出给定正整数中 1 位的计数。要实现此按位左移运算符,可以使用如下例所示:
<?php
function CountOneBits($n) {
$mask = 1;
$count = 0;
//按位与运算
//数字的每一位
for($i = 0; $i < 32; ++$i) {
if(($mask & $n) == $mask)
$count++;
$mask = $mask << 1;
}
return $count;
}
echo "CountOneBits(1000) = ".
CountOneBits(1000)."\n";
echo "CountOneBits(1023) = ".
CountOneBits(1023)."\n";
?>
上面的代码将给出以下输出:
CountOneBits(1000) = 6
CountOneBits(1023) = 10