2012-06-14 173 views
1

我從PHP網頁十六進制整數溢出

它寫入閱讀手冊:

// this doesn't go for 
//hexadecimal specified integers above 2^32-1: 

var_dump(0x100000000); 

// output: int(2147483647) 

但它有4.5個字節,比INT更大(4個字節),並且我測試它。

它輸出浮動。

我不明白他們爲什麼矛盾?

+2

'echo PHP_INT_MAX;'告訴你什麼? – hakre

+0

我測試的班級是32,我的桌面是64,它輸出9223372036854775807 –

+1

你還沒有達到極限。 2^32邊界對於32位系統是典型的,但實際值可能會有所不同。 – hakre

回答

3

the PHP manual page on integers:「如果PHP遇到了一些超出了integer的範圍,將會被解釋爲float代替也。 ,導致超出整數類型範圍的數字的操作將返回一個浮點數。「

由於integer類型太小而無法表示該數字,因此PHP會自動將其轉換爲float,以免丟失數據。這是預期的行爲。

但是,您引用的具體示例在手冊中顯然是錯誤的。看起來有人在編寫手冊時發生了錯誤,或者可能是因爲寫入手冊頁的時間過大而導致十六進制文字的行爲發生了變化。

0

它輸出的浮動對我來說:float(4294967296)

DEMO:http://codepad.org/otsGOiWf

+1

然後是manul頁面錯誤? –

+0

http://php.net/manual/de/language.types.integer.php –

+0

什麼是「這不適用於2^32-1以上的十六進制指定整數:」是什麼意思? –