当前位置:网站首页 > 服务器 > 正文

PHP实现javascript无符号右移

adminadmin 2018-12-11 142 0


win10 x64

<?php
function unsignedRightShift($a, $b)
{
    if ($b >= 32 || $b < -32) {
        $m = (int) ($b / 32);
        $b = $b - ($m * 32);
    }
    if ($b < 0) {
        $b = 32 + $b;
    }
    if ($b == 0) {
        return (($a >> 1) & 0x7fffffff) * 2 + (($a >> $b) & 1);
    }
    if ($a < 0) 
    { 
        $a = ($a >> 1); 
        $a &= 0x7fffffff; 
        $a |= 0x40000000; 
        $a = ($a >> ($b - 1)); 
    }
    else { 
        $a = ($a >> $b); 
    }
    return $a; 
}
echo unsignedRightShift(-608900361, 32); // 与 js中的alert(-608900361>>>32)对比



CentOS6.8 x64

/**
 * >>> javascript operator in php x86_64
 * @param int $a
 * @param int $b
 * @return int
 */
function rrr($a, $b)
{
    return ($a & 0xFFFFFFFF) >> ($b & 0x1F);
}
/**
 * >> javascript operator in php x86_64
 * @param int $a
 * @param int $b
 * @return int
 */
function rr($a, $b)
{
    $a = $a & 0x80000000 ? $a | 0xFFFFFFFF00000000 : $a & 0xFFFFFFFF;
    return $a >> ($b & 0x1F);
}
/**
 * << javascript operator in php x86_64
 * @param int $a
 * @param int $b
 * @return int
 */
function ll($a, $b)
{
    $t = ($a & 0xFFFFFFFF) << ($b & 0x1F);
    return $t & 0x80000000 ? $t | 0xFFFFFFFF00000000 : $t & 0xFFFFFFFF;
}


不同系统使用不同的代码。



  • 流泪

    0

  • 打酱油

    0

  • 开心

    1

  • 鼓掌

    0

  • 恐怖

    0

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

请填写验证码
搜索
最近发表
标签列表
最新留言
    • 订阅本站的 RSS 2.0 新闻聚合