[英]PHP float to int cast erratic behavior
至少在我的機器上:
$var = PHP_INT_MAX;
var_dump($var);
$var++;
var_dump((int)$var);
$var += 10;
var_dump((int)$var);
$var += 10000;
var_dump((int)$var);
結果:
int(9223372036854775807)
int(-9223372036854775808)
int(-9223372036854775808)
int(-9223372036854765568)
為什么這種行為如此瘋狂? 我可以理解每次都重試PHP_MIN_INT,但是如果您添加某些數字,它會改變嗎?
我在這里運行此代碼時得到以下結果:
它是未定義的,因為float不適合整數。 什么都可能發生。 它只是PHP,具有所有怪癖。 強制轉換操作是使用C中的(long)
強制轉換操作實現的,在這種情況下,此操作是未定義的,因此您不應該依賴任何特定的行為(實際上,在某些平台上,例如MIPS64,這會導致CPU異常,這會導致將停止PHP)。
資料來源: http : //www.php.net/manual/en/language.types.integer.php#language.types.integer.casting.from-float
更新
關於最后兩行,我無法分辨,但是負結果很可能是由帶符號的整數表示形式和算術引起的。 在此處了解更多信息。
$var = PHP_INT_MAX;
var_dump($var);
$var--;
var_dump($var);
$var -= 10;
var_dump((int)$var);
$var -= 10000;
var_dump($var);
如果我們將+更改為-代碼可以正常工作... ...這意味着在最大值之后無法加上甚至1,因為未分配內存大小
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.