整数型:integer
そふぃのPHP入門 >> PHP言語リファレンス >> PHPの型 >> 整数型:integer

整数型:integer

整数型とは

整数型(integer)とはそのまんま、整数の値の事です。小数付きの数値は浮動小数点型として別に扱われます。

PHPでの整数型では以下の進数法を表す事ができます。

  1. 10進数
  2. 8進数
  3. 16進数

進数というのは数値の数え方の一種で、日常使われるのは10進数です。これは10倍ごとに桁が繰り上がっていきますが、このように繰り上がる桁が繰り上がる値の事を基数といいます。

8進数では基数が「8」、16進数では基数が「16」になり、それぞれ現在の位からn(nは基数の数値)倍ごとに桁があがります。

16進数を例に挙げると、「1の位」・「16の位」・「256の位」・・・・・と続きます。これを10進数で表した場合は「1の位」・「10の位」・「100の位」・・・・・です。

さて、表現方法ですが普段どおりに整数を記述すると10進数値と解釈されます。8進数で表現したい場合は数値の前に「0」を・16進数で表現したい場合は数値の前に「0x」をつけます。

整数値サンプル

  1. <?php
  2. $a = 1234; //10進数値
  3. $b = 0123; //8進数値:10進数の83
  4. $c = 0x1A; //16進数値:10進数の26
  5. echo $a."<br />\n";
  6. echo $b."<br />\n";
  7. echo $c;
  8. ?>

出力結果

1234
83
26

通常は10進数値を主に使っていきますのであまり8進数とか16進数とかにこだわって頭を悩ます事もないと思います。必要に迫られたら使わざるを得ませのでその時覚えればいいですし、普通の処理ではそうそう使いませんので安心して下さいw。

整数値の限界

PHPで扱える整数の限界値は約20億です。プラットフォームに依存するとマニュアルに記載されていますが、元々のPCが20億扱えないのにPHPで20億扱えるようになる訳ではないって事です。

整数型の限界値を超えた場合は浮動小数点型(float)として扱われるようになります。実際の限界値は「2,147,483,647」までのようです。

サンプルで使用しているvar_dump()関数は指定した変数の情報、つまり型と値を出力してくれる関数です。

参考関数

  • var_dump() ---- 指定した変数に関する情報をダンプする

書式

  • var_dump( mixed expression [, mixed expression ... ] )

限界値を超えた値

  1. <?php
  2. $limit_num = 2147483647; //限界値を指定
  3. var_dump($limit_num); //型と値を出力してくれるvar_dump
  4. echo "<br />\n";
  5. $over_num = 2147483648; //限界値+1を指定
  6. var_dump($over_num);
  7. ?>

出力結果

int(2147483647)
int(2147483648)

上記のように2147483647を超えると浮動小数点型のfloatとして解釈されています。これはマイナス方向(負の値)にも当てはまり、「-2147483647」まではint(整数型)・それ以降はfloat(浮動小数点型)です。

別にfloatとして解釈されても良ければ21億以上の大きい数値を扱う事もできるって事でもあります。ではfloat(浮動小数点型)でならどこまで扱えるか?。答えは「想像つかないくらい大きな数値」です(笑)。21億のさらに何千億倍・・・とかも平気でいけます。どこまでいけるか検証する気が失せました・・・。計算に21億以上の必要な方は自分で調べてみてください。

整数型への変換

論理型から

論理型から整数型へ変換された場合は以下のように評価されます。

  • FALSE -- 0
  • TRUE --- 1

つまり、TRUE/FALSEの条件判定をした時に値に0が入ってればFALSE、1が入ってればTRUEとして判断されます。注意したいのは0を「なし」と考えるか「0という値」と考えるかによって、スクリプトの組み方が若干違ってくる、という事です。通常、「なし」という考え方でいい場合は「==」演算子を使いますが、「0という値」として処理したい場合は「===」という演算子を使います。

ここでは詳細は省きますが、PHPスクリプトを組んでいると$配列[0]などで0というキーがあったり、数値を数える時に0から数えたり・・・・と、「0は0でも値としての0」ってものを処理する機会がたくさん出てきます。そういった場合に「==」演算子だと期待通りの動作にならなかったり、ひどい時はエラーになったりしますので、「0」の扱いにはほんの少し注意を向けておくといいです。

参考 比較演算子

浮動小数点型から

浮動小数点型から整数型へ変換した場合、少数以下の端数は切り捨てられます。切り捨てではなく四捨五入したい場合はround()関数を使いますが、結果に小数点以下の数値がなくても浮動小数点型として扱われるので、整数値として扱わなければならない場合はさらに変換が必要になります。

  1. <?php
  2. $cul = 25/7;
  3. echo "<pre>";
  4. var_dump( $cul ); //変数情報を出力
  5. var_dump( (int)$cul ); //キャスティングで変換して情報出力
  6. var_dump( round($cul) ); //round関数で四捨五入。結果もfloatとして扱われる。
  7. echo "</pre>";
  8. ?>

出力結果

float(3.57142857143)
int(3)
float(4)

round()関数は「(ほぼ)四捨五入する」という働きのみで型の変換機能は持ちません。あくまで比較として出しましたが、小数点以下の数値がなくても浮動小数点型(float)として扱われてます。PHPは型に柔軟な言語で状況に応じて自動で型を解釈してくれるため、このような些少の違いにこだわる必要はあまりありませんが、内部的な動きは知っておいた方がいざ予想外の動作をした時のデバッグに役立ちます。

また、整数型への変換は通常のキャスティングと関数の他にintval()関数があります。intval()関数は「整数として値を取得する」という関数です。他の方法があるので一見必要なさそうですが、intval()関数を使うとオプションの指定で8進数への変換や16進数への変換ができます。オプションを指定しなかった場合は10進数で変換されます。

  1. <?php
  2. $num = "17.5"; //文字列型として指定
  3. echo "<pre>";
  4. var_dump( intval($num) ); //$numを整数値として評価
  5. var_dump( intval($num,8) ); //整数値として評価(8進数値)
  6. var_dump( intval($num,16) ); //整数値として評価(16進数値)
  7. echo "</pre>";
  8. ?>

出力結果

int(17)
int(15)
int(23)

参考関数

  • intval() ---- 変数の整数としての値を取得する

書式

  • int intval( mixed var [, int base ] )

進数法について詳しくはこのサイトの範囲を超えますので申し訳ありませんが、別途扱ってる書籍やサイトをご覧下さい。