以下の結果の違いを説明してください
echo intval(1e10);
出力 1410065408
echo 1e10;
出力10000000000
符号付き整数には最大値があります。32 ビット システムでは、それは 2^16 または 2147483647intval
です。より大きな数を -ing すると、オーバーフローします。見つけた値は、次のように計算することもできます。
php > echo 1e10 % (2147483647);
1410065408
PHPマニュアルから:
最大値はシステムによって異なります。32 ビット システムの符号付き整数の最大範囲は -2147483648 ~ 2147483647 です。たとえば、このようなシステムでは、intval('1000000000000') は 2147483647 を返します。64 ビット システムの符号付き整数の最大値は 9223372036854775807 です。
intval は数値を切り捨てます
コード:
<?php
echo 'intval: ' . intval( 1e10 ) . PHP_EOL;
echo '1e10: ' . 1e10 . PHP_EOL;
cli から実行
出力:
intval: 10000000000
1e10: 10000000000
Ubuntu 12.10 x64 php5.4
つまり、x86 (32 ビット) マシンを使用しています。