【发布时间】:2014-08-30 20:19:14
【问题描述】:
我正在寻找一种在 64 位版本的 PHP 5.5.14 中使用 JavaScript 中的 >>> 函数的方法。我在谷歌搜索中找到了this function:
function uRShift($a, $b)
{
$z = hexdec(80000000);
if ($z & $a)
{
$a = ($a >> 1);
$a &= (~$z);
$a |= 0x40000000;
$a = ($a >> ($b - 1));
} else {
$a = ($a >> $b);
}
return $a;
}
这个函数似乎对正数工作正常,但在传递负数时我得到不同的结果。
例如:
PHP:
In: echo uRShift(-672461345, 25);
Out: -149
JavaScript (Chrome 35):
In: -672461345 >>> 25
Out: 107
编辑:
我还尝试了上面链接的答案中提到的其他功能。
function uRShift($a, $b)
{
if($b == 0) return $a;
return ($a >> $b) & ~(1<<(8*PHP_INT_SIZE-1)>>($b-1));
}
PHP:
In: echo uRShift(-672461345, 25);
Out: 549755813867
【问题讨论】:
-
您应该在该问题的另一个答案中使用了代码。
-
您使用的是什么版本的 PHP?似乎在 PHP 5.4 ideone.com/EWmnd4 中工作正常
-
也许你的 PHP 整数比 JavaScript 的大?
-
ideone 正在运行 PHP 5.4.4-12 并且可以正常工作,Runnable 使用 5.4.9 但不能
标签: javascript php bit-manipulation