我得到了一些奇怪的結果,其中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