位运算 PHP << 与 js <<

今天朋友给我发来这样一道面试题

将下方代码改成PHP的

hval += (hval << op[7]) + (hval << op[3]) + (hval << op[9]) + (hval << op[5]) + (hval << op[1]);

<< 这个不是位运算了 查了一下文档  PHP和JS的用起来还不一样啊
经过多方观察得出结果

$hval = "1111111111";
        $op = [1,2,3,4,5,6,7,8,9,11];
        $hval  = $hval +  ll($hval,$op[7]) + ll($hval,$op[3]) + ll($hval,$op[9]) + ll($hval,$op[5]) + ll($hval,$op[1]);
        echo $hval;
        function ll($v, $n)
        {
            $t = ($v & 0xFFFFFFFF) << ($n & 0x1F);

            return $t & 0x80000000 ? $t | 0xFFFFFFFF00000000 : $t & 0xFFFFFFFF;
        }

结果是 : 154655251

这里再放个js的结果

hval = 1111111111;
op = [1,2,3,4,5,6,7,8,9,11];
hval += (hval << op[7]) + (hval << op[3]) + (hval << op[9]) + (hval << op[5]) + (hval << op[1]);
--------------------------------------
结果 154655251






伍先生
  • 职业: 程序员,产品
  • 码龄: 8.7
  • 技能: PHP Go 前端
  • 微信: JwCode
  • 公众号/小程序: 渐悟分享