按位右移赋值运算符 (>>=) 为第一个操作数分配一个等于两个操作数按位右移运算结果的值。
(x >>= y) 等价于 (x = x >> y)
按位右移运算符 (>>) 将两个数字右移第一个操作数的位数由第二个操作数指定的位置。例如:要将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)
使用右移运算符(>>)的代码如下:
<?php
$x = 1000;
//右移赋值操作
$x >>= 2;
//显示结果
echo "x = $x";
?>
上述代码的输出将是:
x = 250
示例:求小于或等于给定数字的 2 的最大幂
考虑一个整数 1000。在按位格式中,它可以写为 1111101000。但是,所有位这里没有写。完整的表示将是 32 位表示,如下所示:
00000000000000000000001111101000
执行
00000000000000000000001111111111
将此结果加一,然后将结果右移一位,将得到小于或等于 1000 的最大 2 次方。
00000000000000000000001000000000
下面的代码将计算小于或等于给定数字的 2 的最大幂。
<?php
function MaxPowerOfTwo($N) {
//将所有右侧位更改为1。
$N = $N | ($N>>1);
$N = $N | ($N>>2);
$N = $N | ($N>>4);
$N = $N | ($N>>8);
$N = $N | ($N>>16);
//$N 加 1 得到最小幂
//大于给定数字的 2 个
$N = $N + 1;
//右移一位使得
//小于或的2的最大幂
//等于给定数字
$N >>= 1;
return $N;
}
echo "MaxPowerOfTwo(100) = ".
MaxPowerOfTwo(100)."\n";
echo "MaxPowerOfTwo(500) = ".
MaxPowerOfTwo(500)."\n";
echo "MaxPowerOfTwo(1000) = ".
MaxPowerOfTwo(1000)."\n";
?>
上面的代码将给出以下输出:
MaxPowerOfTwo(100) = 64
MaxPowerOfTwo(500) = 256
MaxPowerOfTwo(1000) = 512