フルスタックエンジニアのノウハウ
2021.05.18    2022.02.27

PHPマニュアルを一緒に読み解こう!#8「型:整数 」

PHPマニュアルを一緒に読み解こう!#8「型:整数 」

この記事の動画版はこちら

チャンネル登録お願いします!


※この記事はPHPマニュアルの解説です。


整数【要点まとめ】


言語リファレンス > 型 >「整数」の解説です。
マニュアルページを見ながらご覧ください。


PHPでは、整数型は「int」または「integer」と呼ばれます。


小数点の付かない「負の数」「0」「正の数」つまり「整数」を表すデータ型ですね。


ちなみに、小数を扱う場合は別のデータ型や関数を使用します。


整数は、10進数、16進数、8進数、2進数のどれかで指定可能です。


また、マイナス(-)及び、プラス(+)を付けて、負の数や正の数を指定することもできます。




・10進数は、僕らが普段から使っている10ごとに桁が繰り上がる数字の表記形式で、直接数値で指定可能です。

・8進数で表記したい場合は、頭に「0」を付けます。

・16進数で表記したい場合は、頭に「0x」を付けます。

・2進数で表記したい場合は、頭に「0b」を付けます。

・また、PHPのバージョン7.4.0以降では、このように数字を見やすいようにアンダースコアで区切って表記することも可能です。
このアンダースコアは、PHPが実行時に自動的に削除してくれます。


詳しい仕様がこちらに書かれていますが、上で説明されている内容と同じです。




・10進数(decimal)の場合は、数値を直接書き、アンダースコアが使用できます。

・16進数(hexadecimal)の場合は、先頭が「0x」で始まり、アンダースコアが使用できます。

・8進数(octal)の場合は、先頭が「0」で始まり、アンダースコアが使用できます。

・2進数(binary)の場合は、先頭が「0b」で始まり、アンダースコアが使用できます。

・PHPのinteger型は、4つの表記方法が使用できます。


なお、扱うことのできる整数のサイズは、プログラムを動作させるOSよって異なります。


32ビットOSの場合は「約20億」
64ビットOSの場合は「約900京」


となります。


PHPは、「符号無し整数」つまり、正の数だけを扱う形式はサポートしていません。


使用しているOSでどのくらいのサイズが扱えるかを確認するには、定数「PHP_INT_SIZE」で確認することができます。


また、「PHP_INT_MAX」で扱える整数の最大値、「PHP_INT_MIN」で扱える整数の最小値を確認することもできます。


このように、int型には扱える限界値がある訳ですが、では、その限界値を超えた場合はどうなるのでしょうか?


その場合は、自動的にfloat型に変換されます。


例えば、32ビットシステムでは、限界値は「2147483647」となりますが


試しに、「2147483648」を入れてみると、この変数のデータ型はfloat型に自動変換されます。




64ビットの場合も同じですね。




ちなみに、これを実際に実験している動画もありますので、良かったら見てみてください。

PHPでINTの最大値をオーバーするとどうなる?



さて、マニュアルには「PHPには整数の割り算を行う演算子はありません」と書かれていますが

正確には、このように割り算をした結果が小数になる場合は、float型に変換されるということです。



割り算をした結果が整数になる場合(要は割り切れる場合)は、floatには変換されず、int型になります。


なお、intdiv()という関数を使うと、割り算の結果が小数の場合でも整数に強制変換されます。


0に近い方に丸められるので、例えば結果が0.5の場合は0になります。


また、round()という関数を使うと四捨五入することもできます。


キャストという方法を使うと、別のデータ型のデータをint型に変換することができます。


キャストを行うには、データの前に(int)または(integer)と書きます。


ただし、int型を指定する必要がある部分では、PHPは自動的にint型にデータを変換してくれるので

基本的にはキャストを使用する必要はありません。


また、キャスト以外にも、intval()という関数を使ってもint型にデータを変換することが可能です。


resource型をint型に変換すると、PHPがそのリソースに付与した内部番号であるリソース番号に変換されます。


boolean型をint型に変換すると、falseの場合は0、trueの場合は1に変換されます。


float型をint型に変換すると、先ほどの例のように0に近い方に丸められます。

例えば0.5というfloat型をint型に変換すると、0になります。


ただし、そのデータが整数の限界値を超える場合は、undefinedになりますので注意しましょう。


Nanや無限大をint型に変換すると、0になります。


なお、floatは計算の精度に関する問題があり、intに変換すると予期しない結果になることがあります。

この問題については、floatのページで解説されています。


文字列型をint型に変換した場合、元々の文字列が数字を表しているならば、その数値になります。

そうでない場合は、0に変換されます。


NULLをint型に変換すると、0になります。


それ以外の型については、boolean型に変換された場合と同じ動作をしますが、今後動作が変わる可能性があるため行わない方が良いでしょう。


ということで、今回は言語リファレンスの中から「型:整数」を読み進めました。


また次回、この続きから読み進めていきましょう!


おすすめ記事