1. 程式人生 > >php int型別思索

php int型別思索

原文地址

起因

業務涉及了一組大整數的累加和,每個整數大約9位數,每組有幾百個數字,擔心數字溢位,所以瞭解下php int型別的範圍。

測試

根據php官方文件,我的機器是64位,所以int範圍應該是在(-263 -1 ) 到 (263 - 1)

整型數的字長和平臺有關,儘管通常最大值是大約二十億(32 位有符號)。64 位平臺下的最大值通常是大約 9E18,除了 Windows 下 PHP 7 以前的版本,總是 32 位的。

所以我做了如下測試

$num = pow(2, 63) - 1;
var_dump($num); exit;

輸出

double(9.2233720368548E+18
)

奇怪,結果竟然是浮點數,這個明顯是php解析器發現數據溢位後自動使用了double型別。
仔細思考原因如下:

263本身已經超過了int的表示範圍,php將其解釋為double,之後再如何運算的結果都是double

所以我修改了下程式碼

$nums = pow(2, 62) - 1 + pow(2, 62);
var_dump($num); exit;

輸出

int(9223372036854775807)

到此,證實了php int型別最大值為263 - 1。