Javascript和PHP的类似功能给出了不同的输出

时间:2012-10-23 11:19:10

标签: php javascript

<?
    class int64{
        var $h;
        var $l;
        function int64($h, $l)
        {
            $this->h = $h;
            $this->l = $l;
        }
    }
    function int64rrot(int64 $dst, int64 $x, $shift)
    {
        $dst->l = ($x->l >> $shift) | ($x->h << (32-$shift));
        $dst->h = ($x->h >> $shift) | ($x->l << (32-$shift));
        print_r($dst);
    }
    $a =  new int64(1779033703,-205731576);
    $b =  new int64(1779033701,-205731572);
    int64rrot($a,$b,19);
?>
<script type="text/javascript">
    function int64rrot(dst, x, shift)
    {
        dst.l = (x.l >>> shift) | (x.h << (32-shift));
        dst.h = (x.h >>> shift) | (x.l << (32-shift));
        console.log(dst);
    }
    function int64(h, l)
    {
      this.h = h;
      this.l = l;
    }
    a =  new int64(1779033703,-205731576);
    b =  new int64(1779033701,-205731572);
    int64rrot(a,b,19);
</script>

屏幕输出(通过PHP:)

int64 Object ( [h] => -1725854399 [l] => -393 ) 

在控制台中输出(通过Javascript)(更正):

int64 { h=-1725854399, l=1020051063}

我想整整纠正这一天。但不能。我需要在PHP代码中进行哪些修改才能得到javascript的答案?

  

我希望使用php获取javascript输出

3 个答案:

答案 0 :(得分:1)

您使用了&gt;&gt;&gt; JavaScript中的运算符。这意味着逻辑右移。 PHP没有这个,这是错误。

获得相同的输出:

使用'&gt;&gt;&gt;'更改JavaScript中的运算符到'&gt;&gt;'

在PHP中实现逻辑右移。

答案 1 :(得分:1)

您在JavaScript中使用了>>> logical rightshift运算符,这在php中不可用。这就是为什么它会导致错误。

你喜欢这样:

function zeroRs($a,$n){
    if($n<=0) return $a;
    $b= 0x80000000;
    return ($a >> $n) & ~($b >> ($n-1));
}

现在而不是$x->l >> $shiftzeroRs($x->l, $shift)。这应该有效!

答案 2 :(得分:0)

我从来没有在JavaScript中看到像>>>这样的运算符。也许这就是错误。

运营商的使用情况有所不同。

See the MDN docs for details on >>> vs >>.

而不是:

x.l >>> shift

尝试:

x.l >> shift