2012-06-14 2 views
1

나는 그것은 기록하는 PHP 홈페이지진수 정수 오버 플로우

에서 설명서를 읽어 :

// this doesn't go for 
//hexadecimal specified integers above 2^32-1: 

var_dump(0x100000000); 

// output: int(2147483647) 

그러나 (4 바이트) INT보다 큰 4.5 바이트를 가지고 있으며, 나는 그것을 테스트합니다.

플로트를 출력합니다.

왜 나는 모순되는가?

그것은 나를 위해 float를 출력
+2

'echo PHP_INT_MAX;'는 무엇을 말합니까? – hakre

+0

클래스가 32이고 데스크톱이 64이고 출력이 9223372036854775807입니다. –

+1

아직 제한에 도달하지 않았습니다. 2^32 경계는 32 비트 시스템에서 일반적이지만 실제 값은 다를 수 있습니다. – hakre

답변

3

:. PHP는 정수 타입의 범위를 넘는 수를 발견하면 "이 대신 float 타입으로 해석 될 것이다 또한 정수형의 경계를 넘는 숫자를 생성하는 연산은 대신 float를 반환합니다. "

integer 유형이 너무 작아 그 숫자를 나타낼 수 없으므로 PHP는이를 자동으로 float으로 변환하여 데이터를 잃지 않습니다. 이는 예상되는 동작입니다.

그러나 인용 한 특정 예는 설명서에서 분명히 잘못되었습니다. 매뉴얼을 작성할 때 누군가가 실수를 한 것처럼 보일 수도 있고, 또는 매뉴얼 페이지를 작성한 이후로 크기가 큰 16 진수 리터럴의 동작이 변경되었을 수도 있습니다.

0
+1

다음 manul 페이지가 잘못 되었습니까? –

+0

http://php.net/manual/de/language.types.integer.php –

+0

그리고 "이것은 2^32-1보다 큰 16 진수로 지정된 정수는 가지 않습니다."는 의미는 무엇입니까? –