PHP マニュアル
前のページ | 第 7 章 型 | 次のページ

# 整数

integer は、Z = {..., -2, -1, 0, 1, 2, ...}という集合 です。

任意精度整数 および floatも参照下さい。

## 構文

整数(integer)は、10進数(基底10)、16進数(基底16)、8進数(基底8)表記 で指定可能です。オプションで、符号(-または+)を前に付けることが可 能です。

8進数表記を使用する場合、数の前に`0` (ゼロ)を付 ける必要があります。また、16進数表記を使用するには、数の前に `0x`を付ける必要があります。

例 7-1整数リテラル

    $a = 1234; # 10進整数
    $a = -123; # 負の数
    $a = 0123; # 8進数 (10進数の83と等価)
    $a = 0x1A; # 16進数 (10進数の26と等価)

最大値が約20億である(32ビット符号付)というのが一般的な値ですが、 整数のサイズはプラットフォーム依存です。 PHPは符号無し整数をサポートしていません。

## 整数のオーバーフロー

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

    $large_number =  2147483647;
    var_dump($large_number);
    // 出力: int(2147483647)

    $large_number =  2147483648;
    var_dump($large_number);
    // 出力: float(2147483648)

    // 指定した16進表現整数も出力
    var_dump( 0x80000000 );
    // 出力: float(2147483648)

    $million = 1000000;
    $large_number =  50000 * $million;
    var_dump($large_number);
    // 出力: float(50000000000)

警告
不幸にして、スクリプトエンジンにはバグがあり、負の数が 含まれている場合に、常に正しく動作するわけではありません。例えば、 `-50000 * $million`を実行した場合、結果は、 `-429496728`となります。しかし、オペランドが共に 正の場合は問題ありません。 この問題はPHP 4.1.0で解決されました。

PHPには整数の割り算はありません。`1/2`は float型の0.5になります。

    var_dump( 25/7 );
    // output: float(3.5714285714286)

## 整数への変換

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

型の相互変換 を参照下さい。

### booleansから

`FALSE` は、`0` (ゼロ)となり、 `TRUE` は、`1`となります。

### 浮動小数点数から

floatから整数に変換する場合、その数はゼロの方に丸められます。

floatが整数の範囲(通常は `+/- 2.15e+9 = 2^31`)を越える場合、結果は undefined となります。これは、 そのfloatが正しい整数の結果を得るために十分な精度を得られなかっ たからです。この場合、警告も通知も発生しません!

警告

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

    echo (int) ( (0.1+0.7) * 10 ); // 7が出力されます!

より詳細な情報については、 floatの精度に関する注意を参照下さい。

### 文字列から

文字列変換 を参照下さい。

### 他の型から

注意
整数への変換の動作は、他の型については定義されません。現在の 動作は、その値がまず 論理値に変換 された場合と同じです。しかし、この動作は予告なく変更 されることがありえるので、これを前提にしていはいけません。

前のページ | ホーム | 次のページ
論理型(boolean) | 上に戻る | 浮動小数点数