2017-05-12 13 views
1

PHP에서 최소 정수,PHP 7 (64 비트 우분투)에서 대화 형 모드에서 7

php > echo true; 
1 
php > echo false; # no output for false 
php > echo PHP_INT_MIN == -9223372036854775808; 
1 
php > echo is_int(PHP_INT_MIN); 
1 
php > echo is_int(-9223372036854775808); 

왜 마지막 라인 출력 1합니까?

+0

더 많은 정보 추가 –

+0

Ok echo PHP_INT_MIN === -9223372036854775808; 거짓입니다. 그럼에도 불구하고, echo PHP_INT_MIN; -9223372036854775808 및 echo is_int (-9223372036854775808)를 표시합니다. is false – zuggy

+0

죄송합니다 왜 PHP_INT_MIN에 의해 ​​표시된 값이 is_int()로 확인할 때 정수가 아닌지 궁금합니다. – zuggy

답변

3

var_dump()은 (는) 친구입니다.

var_dump(
    PHP_INT_MIN, 
    is_int(PHP_INT_MIN), 
    -9223372036854775808, 
    is_int(-9223372036854775808) 
); 

/* Output: 
int(-9223372036854775808) 
bool(true) 
float(-9.2233720368548E+18) 
bool(false) 
*/ 
2

is_int 때문에 : 서명 방식으로

perates, 서명 및 환경 PHP의 워드 크기에 제한되지는에서 실행되는

등 -9223372036854775808이 있습니다. 시스템 단어보다 작음

+0

이것을 지적 해 주셔서 감사합니다. 이 대답을 내가 이미 그렇게하지 않았 더라면 받아 들였을까요 – zuggy

+0

lol 그래서 PHP의 최소 정수는 정수가 아니겠습니까? –

+0

정수에 서명 할 수 있으므로 PHP.net 주석에서 인용 한 주석이 PHP7에서 유효하지 않은 것으로 보입니다. (내 대답 참조) – Code4R7

2

첫 번째 PHP는 정수 오버 플로우 때문에 정수 값을 float로 구문 분석합니다. 그런 다음 is_int()를 사용하여 PHP가 구문 분석 한 내용이 integer인지 확인합니다. 64 비트 시스템의 경우 예제 # 3을 참조하십시오.

is_int()는 부호없는 정수에서도 작동한다는 점에 유의하십시오. 사용하여 32 비트 PHP 7 :

echo PHP_INT_MIN;     // -2147483648 
echo var_dump(is_int(-2147483648)); // bool(false) 
echo var_dump(is_int(-2147483647)); // bool(true) 

확인 PHP_INT_MIN을 만들려면 한으로 해제되어, 당신의 64 비트 PHP 7에서이 작업을 시도하십시오 :

echo var_dump(is_int(-9223372036854775807)); // bool(true)? 

더 많은 정수 정밀도가 필요한 경우 GMP extension을 사용할 수 있습니다.