php中逻辑移位的解决办法
推荐:启网 - 专业的主机、服务器合租提供商 17hz.net - 5年服务器合租精品服务
我们知道移位有算术移位与逻辑移位
算术移位:手册里面是这样介绍的.
$a << $b
Shift left(左移)
将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a >> $b
Shift right(右移)
将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。
php是不支持无符号整数的,所以二进制里的最高位即最左边的哪一位是表示正负的(1=>负,0=>正)
当右移的时候,忽略移除位,左边填充符号位(就看最高位了),这个就是php移位的实质了.
而在javascript里面有个逻辑右移位>>>, 实质就是忽略移除位,左边填充0,要用php怎么实现逻辑右移呢?
请看:(针对32位系统)
function SHIFTR($x, $bits)
{
// 位移量超出范围的两种情况
if($bits <= 0) {
return $x;
}
if($bits >= 32) {
return 0;
}
//转换成代表二进制数字的字符串
$bin = decbin($x);
$l = strlen($bin);
//字符串长度超出则截取低32位,长度不够,则填充高位为0到32位
if($l > 32) {
$bin = substr($bin, $l - 32, 32);
} elseif($l < 32) {
$bin = str_pad($bin, 32, '0', STR_PAD_LEFT);
}
//取出要移动的位数,并在左边填充0
return bindec(str_pad(substr($bin, 0, 32 - $bits), 32, '0', STR_PAD_LEFT));
}
请支持:酷瓜网:http://www.koogua.com











