PHPマニュアル要点まとめ#8「型:整数 」
この記事の動画版はこちら(画像クリックでYoutubeに飛びます)
※この記事は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には整数の割り算を行う演算子はありません」と書かれていますが
正確には、このように割り算をした結果が小数になる場合は、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型に変換された場合と同じ動作をしますが、今後動作が変わる可能性があるため行わない方が良いでしょう。
ということで、今回は言語リファレンスの中から「型:整数」を読み進めました。
また次回、この続きから読み進めていきましょう!