2010-02-21 73 views
5

我對PHP的左移函數的行爲非常困惑。我在兩臺不同的機器(開發和託管)上使用它,他們給我不同的答案。我跟蹤它到這個計算:PHP左移在兩臺不同的機器上給出兩個答案

(-3941404251) << 5;

在一臺機器,我得到了答案-1570884448;另一方面,我得到0.在這兩個系統上,PHP_INT_MAX = 2147483647.後者是一個32位系統,第一個64位,雖然PHP是作爲一個32位進程運行,仍然給出了相同的答案。

我只能假設這是32位與64位的問題,但有沒有簡單的方法來獲得所需的行爲。如果有人能指點我一個功能或者某個東西,那會很棒。

謝謝!

+0

好吧,將回聲放在該陳述的前面會產生同樣的結果。 (上下文不是問題)。 – Brendon 2010-02-21 12:57:38

+0

@Sarfraz:他已經顯示他的代碼:'(-3941404251)<< 5' ;;; @Brendon:我重現了你描述的內容:32位爲0,64位爲-1570884448 – 2010-02-21 12:58:27

回答

1

機器是否運行相同版本的PHP? (-3941404251)對於32位有符號值已經太大了,所以我懷疑「正確」的結果是未定義的,不同的版本/編譯/等不同的結果不會被認爲是一個錯誤。

1

您可以使用BC Math函數來克服整數限制。這是elq的GMP功能答案的替代方案,可能會得到更好的支持。

相關問題