网站地图

php实现javascript的无符号右移运算符>>>

创建时间:2013-12-13 18:36:04最后修改:2013-12-13 18:36:04
php实现javascript的无符号右移运算符>>> ,实现代码:
/**
 * 无符号32位右移 ;模拟实现JS的>>>,无符号右移。实现原理,化为二进制,先右移,后补零。
 * @param mixed $x 要进行操作的数字,如果是字符串,必须是十进制形式
 * @param string $bits 右移位数
 * @return mixed 结果,如果超出整型范围将返回浮点数
 */
function shr32($x, $bits){
    / 位移量超出范围的两种情况
    if($bits <= 0)
    {
        return $x;
    }
    if($bits >= 32)
    {
        return 0;
    }
    /转换成代表二进制数字的字符串
    $bin = decbin($x);
    $l = mb_strlen($bin);
    /字符串长度超出则截取底32位,长度不够,则填充高位为0到32位
    if($l > 32)
    {
        $bin = mb_substr($bin, $l - 32, 32);
    }
    elseif($l < 32)
    {
        $bin = str_pad($bin, 32, '0', STR_PAD_LEFT);
    }
    /取出要移动的位数,并在左边填充0
    return bindec(str_pad(mb_substr($bin, 0, 32 - $bits), 32, '0', STR_PAD_LEFT));
}