<?
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输出
答案 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 >> $shift
做zeroRs($x->l, $shift)
。这应该有效!
答案 2 :(得分:0)
我从来没有在JavaScript中看到像 >>>
这样的运算符。也许这就是错误。
运营商的使用情况有所不同。
See the MDN docs for details on >>>
vs >>
.
而不是:
x.l >>> shift
尝试:
x.l >> shift