정수(Integers)

int는 집합 ℤ = {..., -2, -1, 0, 1, 2, ...}의 숫자입니다.

또한 보십시오:

구문

int는 10진수(기수 10), 16진수(기수 16), 8진수(기수 8) 또는 이진법(기수 2) 표기법으로 지정할 수 있습니다. 부정 연산자는 음수 int를 나타내는 데 사용할 수 있습니다.

8진법을 사용하려면 숫자 앞에 0을 붙입니다. PHP 8.1.0부터 8진 표기법 앞에 0o 또는 0O가 올 수도 있습니다. 16진수 표기법을 사용하려면 숫자 앞에 0x를 붙입니다. 이진 표기법을 사용하려면 숫자 앞에 0b를 붙입니다.

PHP 7.4.0부터 정수 리터럴은 리터럴의 가독성을 높이기 위해 숫자 사이에 밑줄(_)을 포함할 수 있습니다. 이 밑줄은 PHP의 스캐너에 의해 제거됩니다.

예제 #1 정수 리터럴

                  
<?php
$a = 1234; // decimal number
$a = 0123; // octal number (equivalent to 83 decimal)
$a = 0o123; // octal number (as of PHP 8.1.0)
$a = 0x1A; // hexadecimal number (equivalent to 26 decimal)
$a = 0b11111111; // binary number (equivalent to 255 decimal)
$a = 1_234_567; // decimal number (as of PHP 7.4.0)
?>
                  
                

공식적으로 int 리터럴의 구조는 PHP 7.4.0부터입니다(이전에는 밑줄이 허용되지 않았습니다).

decimal     : [1-9][0-9]*(_[0-9]+)*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*

octal       : 0[oO]?[0-7]+(_[0-7]+)*

binary      : 0[bB][01]+(_[01]+)*

integer     : decimal
            | hexadecimal
            | octal
            | binary
                

int의 크기는 플랫폼에 따라 다르지만 약 20억의 최대 값이 일반적인 값(32비트 부호 있음)입니다. 64비트 플랫폼은 일반적으로 최대값이 약 9E18입니다. PHP는 unsigned int를 지원하지 않습니다. int 크기는 상수 PHP_INT_SIZE를 사용하여 결정할 수 있고, 최대값은 상수 PHP_INT_MAX를 사용하여, 최소값은 상수 PHP_INT_MIN을 사용하여 결정할 수 있습니다.

Integer overflow

PHP가 int 유형의 범위를 벗어난 숫자를 만나면 대신 float로 해석됩니다. 또한 int 유형의 범위를 넘어서는 숫자를 생성하는 작업은 대신 float를 반환합니다.

예제 #2 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)
?>
                  
                

예제 #3 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에는 int 나눗셈 연산자가 없으므로 intdiv() 함수를 사용합니다. 1/2은 float 0.5를 산출합니다. 값을 int로 캐스팅하여 0으로 반올림하거나 round() 함수를 사용하여 반올림을 더 세밀하게 제어할 수 있습니다.

                  
<?php
var_dump(25/7);         // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4)
?>
                  
                
정수(integer)로 변환

값을 int로 명시적으로 변환하려면 (int) 또는 (integer) 캐스트를 사용합니다. 그러나 연산자, 함수 또는 제어 구조에 int 인수가 필요한 경우 값이 자동으로 변환되기 때문에 대부분의 경우 캐스트가 필요하지 않습니다. intval() 함수를 사용하여 값을 int로 변환할 수도 있습니다.

리소스가 int로 변환되면 결과는 런타임에 PHP가 리소스에 할당한 고유한 리소스 번호가 됩니다.

유형 저글링을 참조하십시오.

From booleans

false0(영)을 생성하고 true1(1)을 생성합니다.

From floating point numbers

float에서 int로 변환할 때 숫자는 0으로 반올림됩니다.

float가 int의 경계를 벗어나면(보통 32비트 플랫폼에서 +/- 2.15e+9 = 2^31이고 64비트 플랫폼에서 +/- 9.22e+18 = 2^63) 결과는 정의되지 않습니다. , float에는 정확한 int 결과를 제공하기에 충분한 정밀도가 없기 때문입니다. 경고 없음, 이러한 일이 발생하면 통지조차 발행되지 않습니다!

메모: NaN 및 Infinity는 int로 변환할 때 항상 0입니다.

경고 알 수 없는 분수를 int로 캐스팅하지 마십시오. 때때로 예기치 않은 결과가 발생할 수 있습니다.
                    
<?php
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
?>
                    
                  

float 정밀도에 대한 경고도 참조하십시오.

From strings

문자열이 숫자이거나 선행 숫자인 경우 해당 정수 값으로 해석되고, 그렇지 않으면 영(0)으로 변환됩니다.

From NULL

null은 항상 0으로 변환됩니다.

From other types

주의 int로 변환하는 동작은 다른 유형에 대해 정의되지 않습니다. 예고 없이 변경될 수 있으므로 관찰된 동작에 의존하지 마십시오.