整数
int は、ℤ = {..., -2, -1, 0, 1, 2, ...} という集合です。
以下も参照ください。
構文
整数 (integer) は、10 進数(基数 10)、16 進数 (基数 16)、8 進数 (基数 8) あるいは 2 進数 (基数 2) 表記で指定可能です。オプションで、符号(-または+)を前に付けることが可能です。
8 進数表記を使用する場合、数の前に 0
(ゼロ)
を付ける必要があります。また、16 進数表記を使用するには、数の前に
0x
を付ける必要があります。
2 進数表記を使用する場合、数の前に 0b
を付ける必要があります。
PHP 7.4.0 以降では、可読性を向上させるために整数リテラルの桁の間にアンダースコア
(_
) を含めることができるようになりました。
アンダースコアは PHP の scanner が除去します。
例1 整数リテラル
<?php$a = 1234; // 10進整数$a = 0123; // 8進数 (10進数の83と等価)$a = 0x1A; // 16進数 (10進数の26と等価)$a = 0b11111111; // 2進数 (10進数の255と等価)$a = 1_234_567; // 10進数 (PHP 7.4.0 以降)?>
PHP 7.4.0 以降で使用可能な整数リテラルの形式は以下のように定義されています。 (これより前のバージョンでは、アンダースコアは許されませんでした)
decimal : [1-9][0-9]*(_[0-9]+)* | 0 hexadecimal : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)* octal : 0[0-7]+(_[0-7]+)* binary : 0[bB][01]+(_[01]+)* integer : decimal | hexadecimal | octal | binary
整数のサイズはプラットフォームに依存しますが、
約 20 億 (32 ビット符号付) が一般的な値です。
64 ビットプラットフォームでの通常の最大値は、およそ 9*10^18 (900京) になります。
PHP は符号無し整数をサポートしていません。
整数のサイズは定数 PHP_INT_SIZE
で、
整数の最大値は定数 PHP_INT_MAX
で、
整数の最小値は定数 PHP_INT_MIN
で決まります。
整数のオーバーフロー
int型の範囲外の数を指定した場合、かわりに floatとして解釈されます。また、結果が int型の範囲外の数となるような計算を行うと floatが代わりに返されます。
例2 32 ビットシステムにおける整数のオーバーフロー
<?php$large_number = 2147483647;var_dump($large_number); // int(2147483647)$large_number = 2147483648;var_dump($large_number); // float(2147483648)$million = 1000000;$large_number = 50000 * $million;var_dump($large_number); // float(50000000000)?>
例3 64 ビットシステムにおける整数のオーバーフロー
<?php$large_number = 9223372036854775807;var_dump($large_number); // int(9223372036854775807)$large_number = 9223372036854775808;var_dump($large_number); // float(9.2233720368548E+18)$million = 1000000;$large_number = 50000000000000 * $million;var_dump($large_number); // float(5.0E+19)?>
PHP には整数の割り算を行う演算子はありません。
整数の割り算を行うには、intdiv() 関数を使って下さい。
1/2
は
float 型の 0.5
になります。
0 に近い方向の整数値に値を丸めるためにキャストを使用することができ、
また、round() 関数を使用することもできます。
<?phpvar_dump(25/7); // float(3.5714285714286) var_dump((int) (25/7)); // int(3)var_dump(round(25/7)); // float(4) ?>
整数への変換
int に値を明示的に変換するには、キャスト
(int)
または (integer)
のどちらかを使用してください。しかし、多くの場合、演算子、関数、制御構造が
int 引数を必要とする場合、値は自動的に変換されるため、
キャストを使用する必要はありません。
関数 intval() を用いて値を整数に変換することも可能です。
resource を int に変換すると、その結果は一意なリソース番号となります。 これは、その resource に対して PHP が実行時に割り当てた番号です。
型の相互変換 を参照ください。
浮動小数点数から
float から整数に変換する場合、その数はゼロのほうに丸められます。
float が整数の範囲 (通常は、32 ビットプラットフォームでは +/- 2.15e+9 = 2^31
、64 ビットプラットフォームでは +/- 9.22e+18 = 2^63
) を越える場合、結果は undefined となります。これは、
その float が正しい整数の結果を得るために十分な精度を得られなかったからです。
この場合、警告も通知も発生しません!
注意:
NaN や無限大を int にキャストした結果は、常にゼロとなります。
警告 未知の端数を int にキャストしないでください。 この場合、予期しない結果となることがあります。
<?phpecho (int) ( (0.1+0.7) * 10 ); // 7が出力されます!?>
より詳細な情報については、 float の精度に関する注意を参照ください。
NULL から
null
は、常に0に変換されます。
他の型から
警告 整数への変換の動作は、他の型については定義されません。 現在の動作は、その値がまず 論理値に変換された 場合と同じです。しかし、この動作は予告なく変更されることがありえるので、 これを前提にしてはいけません。