php int型別思索
阿新 • • 發佈:2018-12-19
起因
業務涉及了一組大整數的累加和,每個整數大約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。