PHPのintの最大値はいくつですか?


117

非常に大きな数を扱うことができる特別なライブラリを無視して、PHPに格納できる最大のint値は何ですか?

回答:


124

PHPマニュアルから:

整数のサイズはプラットフォームに依存しますが、最大値である約20億が通常の値です(32ビットの符号付き)。PHPは符号なし整数をサポートしていません。PHP 4.4.0およびPHP 5.0.5以降、整数のサイズは定数PHP_INT_SIZEを使用して、最大値は定数PHP_INT_MAXを使用して決定できます。

64ビットプラットフォームの最大値は通常9E18ですが、PHP 7より前のWindowsでは常に32ビットでした。


15
さて、最近非常に一般的であるamd64 linuxでは、9223372036854775807(2 ^ 63-1)
derobert

4
それは桁違いです。専用サーバーを購入するときに、IntelよりもAMDを選択することを考えられる最初の理由があります。:)
karim79 2009年

39
@ karim79、それはAMDではなく64ビットのアーチが原因だと思います。=]
ストレッジャー2009年

7
AMD64は、最近AMDとIntelの両方で使用されている64ビットアーキテクチャの1つの名前です。それの他の名前にはx64やIntel 64が含まれます。ストラージャーが言うように、AMDであることとは何の関係もありません
thomasrutter

4
私のWindows XAMPPエコーの2147483647。AMD Athlon X2
Vova Popov

86

PHPの32ビットビルド:

  • 整数は-2,147,483,648から2,147,483,647まで(〜±20億)

PHPの64ビットビルド:

  • 整数は-9,223,372,036,854,775,808から9,223,372,036,854,775,807(〜±9千兆)

数値は包括的です。

注:一部の64ビットビルド、かつて32ビット整数を使用していたもの、特にPHPの古いWindowsビルド

これらの範囲外の値は、これらの範囲内の非整数値と同様に、浮動小数点値で表されます。インタープリターは、計算の結果値を整数として表すことができないかどうかに基づいて、浮動小数点への切り替えをいつ行う必要があるかを自動的に判断します。

PHPは「符号なし」整数自体をサポートしていないため、すべての整数の最大値を「符号付き」整数の範囲に制限します。


1
興味深いことに、32ビットのビルドでは、floatは整数の精度をintsよりも高い値に保つことができます。floatは2 ^ 53 + 1までの整数値に使用でき、intの2 ^ 31-1よりも大幅に高くなります。64ビット浮動小数点数が同じ精度であるが、int値は、最大2 ^ 63になりましたので、これを逆に構築- 1
thomasrutter

21

PHP intのサイズはプラットフォームに依存します:

整数のサイズはプラットフォームに依存しますが、最大値である約20億が通常の値です(32ビットの符号付き)。PHPは符号なし整数をサポートしていません。PHP 4.4.0およびPHP 5.0.5以降、整数のサイズは定数PHP_INT_SIZEを使用して、最大値は定数PHP_INT_MAXを使用して決定できます。

PHP 6は "longs"(64ビット整数)を追加します。


2
私はこれらの反対票を獲得しません。いくつかの追加情報が投入されたとしても、これは完全に良い回答です。それを修正するために+1してください。
nickf 2009年

3
この答えは、もともと「プラットフォーム読ん依存」(依存しません)。また、PHP 6以前は64ビットintが存在しなかったとも(まだ)主張しています。これは誤りです。
thomasrutter 16

ただし、PHP 6は決して発生しなかったので、それは一種の無関係です。
BadHorsie

16

(少し遅れますが、役に立つかもしれません)

PHP_INT_MAXとPHP_INT_SIZEのみを信頼してください。この値は、アーチ(32/64ビット)とOSによって異なります...

その他の「推測」または「ヒント」はすべて偽である可能性があります。


6

ああ見つけた:2 32-1(2147483647)

http://au2.php.net/int

整数オーバーフロー

PHPが整数型の範囲を超える数値を検出した場合、その数値は代わりに浮動小数点数として解釈されます。また、整数型の境界を超える数になる演算では、代わりに浮動小数点数が返されます。

<?php
$large_number =  2147483647;
var_dump($large_number);
// output: int(2147483647)

$large_number =  2147483648;
var_dump($large_number);
// output: float(2147483648)

8
これは、32ビットプラットフォームの場合です。また、多くの人が64ビットプラットフォームでサーバーを実行していることも考慮してください。
thomasrutter、

2

お使いのOSにもよりますが、マニュアルによると2147483647が通常の値です。


6
具体的には、32ビットプラットフォームで実行しているか64ビットプラットフォームで実行しているかによって異なります。32ビットは、ほとんどの人が32ビットサーバーを実行する世界でのみ「通常」です。ますますそうではなくなってきている。
thomasrutter、

0

PHP_INT_*定数が非常に長い時間のために存在する、同一のMIN / MAX値が負の数に達するまで左シフトすることにより、プログラム見つけることができます。

$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;

0

PHPが実行されるサーバーのアーキテクチャに従います。64ビットの場合、

print PHP_INT_MIN . ", ” . PHP_INT_MAX; 収量 -9223372036854775808, 9223372036854775807

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.