非常に大きな数を扱うことができる特別なライブラリを無視して、PHPに保存できる最大のint値は何ですか?
PHPマニュアル から:
整数のサイズはプラットフォームに依存しますが、最大値である約20億が通常の値です(32ビットの符号付き)。 PHPは符号なし整数をサポートしていません。整数サイズは、定数PHP_INT_SIZEを使用して決定でき、最大値はPHP 4.4.0およびPHP 5.0.5以降の定数PHP_INT_MAXを使用して決定できます。
通常、64ビットプラットフォームの最大値は約9E18です。ただし、PHP 7より前のWindowsでは、常に32ビットでした。
PHPの32ビットビルド:
PHPの64ビットビルド:
数字は包括的です。
注:一部の64ビットビルドは32ビット整数を使用していましたが、特に古いWindowsビルドのPHP
これらの範囲外の値は、これらの範囲内の非整数値と同様に、浮動小数点値で表されます。インタープリターは、計算の結果値を整数として表現できないかどうかに基づいて、この浮動小数点への切り替えが必要になるタイミングを自動的に決定します。
PHPは「符号なし」整数をサポートしていないため、すべての整数の最大値を「符号付き」整数の範囲に制限しています。
PHP intsのサイズは プラットフォーム依存 :
整数のサイズはプラットフォームに依存しますが、最大値である約20億が通常の値です(32ビットの符号付き)。 PHPは符号なし整数をサポートしていません。整数サイズは、定数PHP_INT_SIZEを使用して決定でき、最大値はPHP 4.4.0およびPHP 5.0.5以降の定数PHP_INT_MAXを使用して決定できます。
PHP 6は「longs」(64ビットint)を追加します。
(少し遅れましたが、役に立つかもしれません)
PHP_INT_MAXおよびPHP_INT_SIZE のみを信頼します。この値はArch(32/64ビット)とOSによって異なります...
その他の「推測」または「ヒント」は偽である可能性があります。
ああ、見つけた:232 -1(2147483647)
整数オーバーフロー
PHP整数型の境界を超える数値に遭遇すると、代わりにfloatとして解釈されます。また、整数型の境界を超える数値を生成する演算は、代わりにフロート。
<?php
$large_number = 2147483647;
var_dump($large_number);
// output: int(2147483647)
$large_number = 2147483648;
var_dump($large_number);
// output: float(2147483648)
OSに依存しますが、 manual に従って、2147483647が通常の値です。
PHP_INT_*
定数は非常に長い間存在します。負の数に達するまで左シフトすることで、同じMIN/MAX値をプログラムで見つけることができます。
$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;
PHPが実行されるサーバーのアーキテクチャに従います。64ビットの場合、
print PHP_INT_MIN . ", ” . PHP_INT_MAX;
は-9223372036854775808, 9223372036854775807
を生成します