PHP에서 int의 최대 값은 얼마입니까?


117

매우 큰 숫자로 작업 할 수있는 특수 라이브러리를 무시하고 PHP에 저장할 수있는 가장 큰 int 값은 무엇입니까?

답변:


124

보내는 사람 PHP 매뉴얼 :

정수의 크기는 플랫폼에 따라 다르지만 약 20 억의 최대 값이 일반적인 값 (부호 32 비트)입니다. PHP는 부호없는 정수를 지원하지 않습니다. 정수 크기는 PHP_INT_SIZE 상수를 사용하여 결정할 수 있으며, 최대 값은 PHP 4.4.0 및 PHP 5.0.5부터 상수 PHP_INT_MAX를 사용하여 결정할 수 있습니다.

64 비트 플랫폼의 최대 값은 일반적으로 약 9E18입니다. 단, PHP 7 이전의 Windows에서는 항상 32 비트였습니다.


15
글쎄요, 요즘 아주 흔한 amd64 리눅스에서는 9223372036854775807 (2 ^ 63-1)
derobert

4
그것은 많은 숫자입니다. 전용 서버를 구입할 때 Intel보다 AMD를 선택해야하는 첫 번째 이유가 있습니다. :)
karim79

39
@ karim79, AMD가 아니라 아치가 64 비트이기 때문이라고 생각합니다. =]
strager

7
AMD64는 오늘날 AMD와 Intel 모두에서 사용하는 64 비트 아키텍처의 한 이름입니다. 다른 이름으로는 x64와 Intel 64가 있습니다. Strager가 말했듯이 AMD와는 아무 관련이 없습니다
thomasrutter

4
내 Windows XAMPP 에코의 2147483647. AMD Athlon X2
Vova Popov를 사용했습니다.

86

32 비트 PHP 빌드 :

  • 정수는 -2,147,483,648 에서 2,147,483,647 (~ ± 20 억)까지 가능합니다.

64 비트 PHP 빌드 :

  • 정수는 -9,223,372,036,854,775,808 에서 9,223,372,036,854,775,807 (~ ± 9 quintillion )까지 가능합니다.

숫자는 포함됩니다.

참고 : 일부 64 비트 빌드는 한때 32 비트 정수를 사용했습니다. 특히 이전 Windows 빌드의 PHP

이 범위를 벗어난 값은이 범위 내의 정수가 아닌 값과 마찬가지로 부동 소수점 값으로 표시됩니다. 인터프리터는 계산 결과 값을 정수로 나타낼 수 없는지 여부에 따라이 부동 소수점으로의 전환이 필요한시기를 자동으로 결정합니다.

PHP는 "부호없는"정수를 지원하지 않으므로 모든 정수의 최대 값을 "부호있는"정수 범위로 제한합니다.


1
흥미롭게도 32 비트 빌드에서 float 는 정수 정확도를 int보다 높은 값으로 유지할 수 있습니다. float는 정수의 2 ^ 31-1보다 훨씬 높은 최대 2 ^ 53 + 1의 정수 값에 사용할 수 있습니다. 64 비트 빌드에서는 float가 동일한 정밀도이지만 int는 이제 최대 2 ^
63-1

21

PHP int의 크기는 플랫폼에 따라 다릅니다 .

정수의 크기는 플랫폼에 따라 다르지만 약 20 억의 최대 값이 일반적인 값 (부호 32 비트)입니다. PHP는 부호없는 정수를 지원하지 않습니다. 정수 크기는 PHP_INT_SIZE 상수를 사용하여 결정할 수 있으며, 최대 값은 PHP 4.4.0 및 PHP 5.0.5부터 상수 PHP_INT_MAX를 사용하여 결정할 수 있습니다.

PHP 6은 "longs"(64 비트 정수)를 추가합니다.


2
나는 이러한 반대표를 얻지 못합니다 .. 이것은 추가 정보를 던져도 완벽하게 좋은 대답입니다. +1하여 수정하십시오.
nickf

3
이 답변은 원래 "플랫폼 읽기 의존"(종속되지 않음). 또한 (여전히) 64 비트 정수가 PHP 6 이전에는 존재하지 않았다고 주장합니다. 이것은 거짓입니다.
thomasrutter

하지만 PHP 6은 발생하지 않았으므로 관련성이 없습니다.
BadHorsie


6

아, 나는 그것을 발견 : 2 (32) - 1 (2,147,483,647)

http://au2.php.net/int

정수 오버플로

PHP가 정수 유형의 경계를 벗어난 숫자를 발견하면 대신 float로 해석됩니다. 또한 정수 유형의 경계를 초과하는 숫자가 생성되는 연산은 대신 부동 소수점을 반환합니다.

<?php
$large_number =  2147483647;
var_dump($large_number);
// output: int(2147483647)

$large_number =  2147483648;
var_dump($large_number);
// output: float(2147483648)

8
이것이 32 비트 플랫폼에있을 것입니다. 많은 사람들이 64 비트 플랫폼에서 서버를 실행한다는 점도 고려하십시오.
thomasrutter

2

OS에 따라 다르지만 매뉴얼 에 따르면 2147483647이 일반적인 값 입니다.


6
특히 32 비트 플랫폼에서 실행 중인지 64 비트에서 실행 중인지에 따라 다릅니다. 32 비트는 대부분의 사람들이 32 비트 서버를 실행하는 세상에서 "보통"입니다. 점차적으로 이것은 사실이 아닙니다.
thomasrutter

0

PHP_INT_*상수는 매우 오랫동안 존재 하지만 음수에 도달 할 때까지 왼쪽으로 이동하여 프로그래밍 방식으로 동일한 MIN / MAX 값을 찾을 수 있습니다.

$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;

0

PHP가 실행되는 서버의 아키텍처에 따라 다릅니다. 64 비트의 경우

print PHP_INT_MIN . ", ” . PHP_INT_MAX; 수확량 -9223372036854775808, 9223372036854775807

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.