我得到了一些奇怪的结果,其中2个相同的函数(一个在PHP中,另一个在javascript中)返回不同的结果。当移位时在PHP和JS中获取不同的结果
两个这些行的代码的输入是相同的:
a = 4653896912;
b = 13;
我有双重检查变量类型和两个变量都在JS数和整数在PHP。
对PHP代码行是这样的:
$a = $a >> $b;
对于JavaScript那就是:
a = a >> b;
你会想到一个同时具有后相同的值,但我m得到以下:
PHP: $a = 568102
JS: a = 43814
这让我完全困惑 在此刻。
原来,这绝对是PHP使用64位整数和JS只使用32位的问题。我现在面临的问题是我需要让PHP为这些计算使用32位整数。我发现别人写的功能看起来应该可以工作,但它似乎并没有为我改变输出。
private static function toInt32(&$x) {
$z = hexdec(80000000);
$y = (int) $x;
if($y ==- $z && $x <- $z){
$y = (int) ((-1) * $x);
$y = (-1) * $y;
}
$x = $y;
}
那么PHP的看起来像'>>'的右边结果是按位右移。 – 2011-02-11 19:39:52
嘿布莱恩,一个整数的大小是平台依赖。看看PHP手册。 http://de3.php.net/integer ...你能提供一些关于你的系统的更多信息吗? 32位? 64位?浏览器类型和你的PHP版本?非常感谢! – BaggersIO 2011-02-11 19:42:58
嘿家伙感谢所有的输入,这绝对是我的服务器是64位的问题。现在的问题是,我需要找到一种方法来强制PHP运行这些计算,同时将其限制为32位整数,以便结果与来自JS的结果匹配。 – Brian 2011-02-11 20:02:28