0
<?
    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}

私はこの一日を修正しようとしています。しかし、できませんでした。javascriptとして答えを得るには、PHPコードにどのような変更が必要ですか?

PHPを使用してJavaScript出力を取得したい

4

3 に答える 3

1

JavaScript で >>> 演算子を使用しました。論理右シフトを意味します。PHPにはこれがありません。これがエラーです。

同じ出力を得るには:

JavaScript の演算子を「>>>」から「>>」に変更するか、

PHP で論理的な右シフト関数を実装します。

于 2012-10-23T11:23:58.073 に答える
1

PHP では使用>>> logical rightshiftできない演算子を JavaScript で使用しました。それがエラーの原因です。

あなたはこのようにします:

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

$x->l >> $shiftdoの代わりに今zeroRs($x->l, $shift)。これはうまくいくはずです!

于 2012-10-24T12:46:28.063 に答える
0

>>>JavaScriptのような演算子は見たことがありません。たぶんそれがエラーです。

オペレーターの使い方に違いがあります。

>>>vsの詳細については、MDN ドキュメントを参照してください>>

それ以外の:

x.l >>> shift

試す:

x.l >> shift
于 2012-10-23T11:21:39.707 に答える