Integer

본문

Integer는 소수점을 포함하지 않는 0을 포함한 음수와 양수입니다.

참조 :

  • 임의 길이 정수/GMP
  • Float
  • 임의 정밀도/BCMath

문법

Integer는 Decimal(10진), Hexadecimal(16진), Octal(8진), Binary(2진) 표기법으로 지정할 수 있습니다. 부정 연산자 -는 음수의 표현으로 사용합니다.

Binary(2진) 표기법은 PHP 5.4.0부터 사용할 수 있습니다.

Octal(8진) 표기법을 사용하려면 숫자 앞에 0을, Hexadecimal(16진) 표기법을 사용하려면 숫자 앞에 0x를 붙이십시오. Binary(2진) 표기법을 사용하려면 숫자 앞에 0b를 붙이면 됩니다.

Example #1 Integer의 표기법

<?php
$ a = 1234;       // Decimal(10진)
$ a = 0123;       // Octal(8진), Demical 83
$ a = 0x1A;       // Hexadecimal(16진), Demical 26
$ a = 0b11111111; // Binary(2진), Demical 255
?> 

공식적인 Integer의 표기 구조는 다음과 같습니다.

Decimal     : [1-9][0-9]*
            | 0

Hexadecimal : 0[xX][0-9a-fA-F]+

Octal       : 0[0-7]+

Binary      : 0[bB][01]+

Integer     : Decimal
            | Hexadecimal
            | Octal
            | Binary

Integer의 크기는 플랫폼에 따라 다르지만 32비트 플랫폼을 기준으로 최대 231 – 1 의 값을 지정할 수 있습니다. 32비트를 사용하는 PHP 7 이전의 Windows를 제외한 64비트 플랫폼의 Integer의 크기는 최대 263 – 1입니다. PHP는 부호 없는 Integer를 지원하지 않습니다. Integer의 크기를 위한 PHP_INT_SIZE와, PHP 5.0.5 이후 PHP_INT_MAX를 사용하여 최대 값을, PHP 7.0.0 이후 PHP_INT_MIN을 사용하여 최소값을 지정할 수 있습니다.

경고 : PHP 7 이전에는 유효하지 않은 숫자(8 또는 9)가 Octal(8진) 표기법으로 제공되면 나머지 숫자는 무시되었습니다. PHP 7부터 구문 분석 오류가 발생합니다.

Integer 오버플로우

PHP가 Integer의 범위를 벗어나는 숫자를 발견하면 Float로 해석됩니다. Integer의 범위를 초과하는 숫자를 생성하는 연산은 Float를 반환합니다.

Example #2 32비트 시스템의 Integer 오버플로우

<?php
$large_number = 2147483647;
var_dump($large_number); // Integer 2147483647

$large_number = 2147483648;
var_dump($large_number); // Float 2147483648

$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number); // Float 50000000000
?>

Example #3 64비트 시스템의 Integer 오버플로우

<?php
$large_number = 9223372036854775807;
var_dump($large_number); // Integer  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에는 Integer를 위한 나누기 연산자가 없습니다. 1/2은 Float 0.5를 산출합니다. 값을 0으로 반올림하기 위해 정수로 캐스트할 수 있습니다. 또한 round() 함수를 이용하여 반올림을 보다 세밀하게 제어할 수 있습니다.

참고 : PHP 7.0.0부터 Integer를 나누기 위한  intdiv() 함수를 사용할 수 있습니다. 
<?php
    var_dump(25/7);         // Float 3.5714285714286
    var_dump((int) (25/7)); // Int 3
    var_dump(round(25/7));  // Float 4
?>

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

Resource가 Integer로 변환되면 결과는 런타임시 PHP에 의해 Resource에 할당된 고유한 리소스 번호를 가집니다.

자동 형변환을 참조하십시오.

Integer로 변환

Boolean에서 변환

FALSE는 0으로, TRUE는 1의 값을 가집니다.

Float에서 변환

FloatInteger로 변환하는 경우 소수점 아래의 숫자는 반올림됩니다.

FloatInteger의 경계를 벗어나면 (일반적으로 32 비트 플랫폼의 경우 231 – 1, Windows 이외의 64 비트 플랫폼의 경우 263 – 1) 결과는 정의되지 않습니다. Float는 정확한 Integer의 결과를 제공하기에 충분한 정밀도를 갖지 않기 때문입니다. 위와 같은 상황은 경고가 표시되지 않습니다!

참고 : PHP 7.0.0부터 플랫폼에 상관없이 NaN또는 Infinity 값을 가진 변수를 Integer로 캐스트한다면 결과는 항상 0이 출력됩니다.
경고 :  정의되지 않은 분수를 가진 계산을 Integer로 직접 캐스트하지 마십시오. 때로는 예기치 않은 결과가 발생할 수 있습니다.
<?php
    echo (int) ( (0.1+0.7) * 10 ); // 결과값으로 7이 출력됩니다!
?>

Float의 정밀도에 대한 경고를 함께 참조하십시오.

String에서 변환

String을 Integer로 변환을 참조하십시오.

NULL에서 변환

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

다른 유형에서 변환

경고 : Integer로 변환하는 동작은 다른 유형에 대하여 정의되어 있지 않습니다. 예고없이 변경될 수 있으므로 관찰된 행동에 의존하지 마십시오.
The source of this document is at PHP.net.   
php  ccl-by-4.0

Read More

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다