PHP整数型(整数)

伊谢尔伦
伊谢尔伦オリジナル
2016-11-24 14:06:091775ブラウズ

整数は、集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 内の数値です。

構文

整数値は、10 進数、16 進数、8 進数、または 2 進数で表すことができ、先頭にオプションの記号 (- または +) を付けることができます。

バイナリで表現された整数は、PHP 5.4.0 以降で使用できます。

8進数表現を使用するには、数値の前に0(ゼロ)を追加する必要があります。 16 進数表現を使用するには、数値の前に 0x を付ける必要があります。バイナリ表現を使用するには、数値の前に 0b を付ける必要があります。

例 #1 整数リテラル式

<?php
$a = 1234; // 十进制数
$a = -123; // 负数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0x1A; // 十六进制数 (等于十进制 26)
?>

整数の正式な説明は次のとおりです:

10 進数 : [1-9][0-9]*
| 0

16 進数 : 0[xX][0-9a- fA -F]+

8進数:0[0-7]+

2進数:0b[01]+

整数:[+-]?16進数
| [+-]?
| [+-]?binary

整数の語長はプラットフォームに依存しますが、通常の最大値は約 20 億 (32 ビット符号付き) です。 64 ビット プラットフォームの最大値は通常、9E18 程度です。 PHP は符号なし整数をサポートしていません。整数値の語長は定数 PHP_INT_SIZE で表すことができます。PHP 4.4.0 および PHP 5.0.5 以降では、最大値は定数 PHP_INT_MAX で表すことができます。

警告

不正な数値 (8 または 9 など) が 8 進数に渡された場合、残りの桁は無視されます。

例 #2 8 進数の奇妙なこと

<?php
var_dump(01090); // 八进制 010 = 十进制 8
?>

整数オーバーフロー

指定された数値が整数の範囲を超える場合、それは浮動小数点として解釈されます。同様に、演算結果が整数の範囲を超える場合も浮動小数点数が返されます。

例 #3 32 ビット システムでの整数オーバーフロー

<?php
$large_number = 2147483647;
var_dump($large_number);                     // int(2147483647)
 
$large_number = 2147483648;
var_dump($large_number);                     // float(2147483648)
 
$million = 1000000;
$large_number =  50000 * $million;
var_dump($large_number);                     // float(50000000000)
?>

例 #4 64 ビット システムでの整数オーバーフロー

<?php
$large_number = 9223372036854775807;
var_dump($large_number);                     // int(9223372036854775807)
 
$large_number = 9223372036854775808;
var_dump($large_number);                     // float(9.2233720368548E+18)
$million = 1000000;
$large_number =  50000000000000 * $million;
var_dump($large_number);                     // float(5.0E+19)
?>

PHP には整数の除算演算子がありません。 1/2 は float 0.5 を生成します。値は、小数部分を破棄して整数にキャストすることも、より適切に丸めるためにround()関数を使用することもできます。

<?php
var_dump(25/7);         // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4)
?>

整数に変換

値を整数に明示的に変換するには、(int) または (integer) キャストを使用します。ただし、演​​算子、関数、またはフロー制御で整数パラメーターが必要な場合、値は自動的に変換されるため、ほとんどの場合、キャストは必要ありません。関数 intval() を使用して値を整数型に変換することもできます。

「型変換の識別」を参照してください。

ブール値から変換すると

FALSE は 0 (ゼロ) を生成し、TRUE は 1 (1) を生成します。

浮動小数点数から変換

浮動小数点数から整数に変換する場合、切り捨てとなります。

浮動小数点数が整数の範囲 (通常、32 ビット プラットフォームでは +/- 2.15e+9 = 2^31、64 ビット プラットフォームでは +/- 9.22e+18 = 2^63) を超える場合、結果は正確な整数の結果を得るには精度が不十分であるため、未定義です。この場合、警告はなく、通知さえありません。

警告

未知の分数を整数にキャストしないでください。予測できない結果が生じる可能性があります。

<?php
echo (int) ( (0.1+0.7) * 10 ); // 显示 7!
?>

浮動小数点精度に関する警告を参照してください。

文字列から変換

「文字列を数値に変換する」を参照してください。

他の型からの変換

注意

他の型から整数への変換の動作は定義されていません。予告なく変更される可能性があるため、既存の動作に依存しないでください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。