PHP - 整数

整数

整数 (integer) は、10 進数、16 進数、8 進数、または 2 進数表記で指定可能です。オプションで、符号を付与することが可能です。

  • 16 進数表記は、数値の前に 0x を付けます。
  • 8 進数表記は、数値の前に 0 を付けます。
  • 2 進数表記は、数値の前に 0b を付けます。

PHP 7.4.0 以降では、可読性を向上させるために整数リテラルの桁の間にアンダースコアを含めることができるようになりました。アンダースコアは PHP の scanner が除去します。

<?php
  $a = 1234;       // 10 進整数
  $a = 0x1A;       // 16 進数 (10 進数の 26 と等価)
  $a = 0123;       // 8 進数  (10 進数の 83 と等価)
  $a = 0b11111111; // 2 進数  (10 進数の 255 と等価)
  $a = 1_234_567;  // 10 進数 (PHP 7.4.0 以降)
?>
整数リテラル

整数の最大値は 32 ビットのシステムでは 2147483647、64 ビットのシステムでは 9223372036854775807 になります。整数のサイズは定数 PHP_INT_SIZE で、 整数の最大値は定数 PHP_INT_MAX で、整数の最小値は定数 PHP_INT_MIN で決まります。

integer 型の範囲外の数を指定した場合、かわりに floatとして解釈されます。また、結果が integer 型の範囲外の数となるような計算を行うと float が代わりに返されます。

<?php
  $large_number = PHP_INT_MAX;
  var_dump($large_number); // int(9223372036854775807)
  
  $large_number = PHP_INT_MAX + 1;
  var_dump($large_number); // float(9.2233720368548E+18)
?>
64 ビットシステムにおける整数のオーバーフロー

integer に値を明示的に変換するには、int または integer のいずれかを使用してください。ただし、多くの場合、演算子、関数、制御構造が integer 引数を必要とする場合、値は自動的に変換されるため、キャストを使用する必要はありません。関数 intval() を用いて値を整数に変換することも可能です。

FALSE は 0、TRUE は 1 にキャストされます。float から整数に変換する場合、その数はゼロの方に丸められます。また、NaN や無限大を integer にキャストした結果は、常にゼロとなります。

ただし、以下のように未知の端数を integer にキャストしないでください。この場合、予期しない結果となることがあります。

<?php
  echo (int) ((0.1 + 0.7) * 10); // 7  
?>
未知の端数を integer にキャストした例

関連記事