What's the maximum value for an int in PHP?
Asked Answered
B

8

145

Ignoring the special libraries that allow you to work with very big numbers, what's the largest int value you can store in PHP?

Beatabeaten answered 22/3, 2009 at 7:33 Comment(0)
D
153

From the PHP manual:

The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.

64-bit platforms usually have a maximum value of about 9E18, except on Windows prior to PHP 7, where it was always 32 bit.

Discontinuation answered 22/3, 2009 at 7:36 Comment(11)
Well, on amd64 linux, which is quite common nowadays, its 9223372036854775807 (2^63-1)Mazzard
That's a lot of digits - there's the first reason I can think of to ever choose AMD over Intel when shopping for a dedicated server. :)Discontinuation
@karim79, I think it's due to the arch being 64-bit, not it being AMD. =]Thyrotoxicosis
AMD64 is one name of the 64-bit architecture used by both AMD and Intel these days. Other names for it include x64 and Intel 64. As strager says, nothing to do with it being AMDPhysiological
My windows XAMPP echo's 2147483647 . I had AMD Athlon X2Strawser
@Vova Popov, Yeah I believe that for some reason if you're running php on windows it's forced into using the 32 bit int even though you have a 64 bit machine. This bug has been a headache on my current project.Embroideress
@Raymo: Probably has a lot to do with how big your compiler considers a long to be. If it's compiled for a 64-bit CPU, but with a compiler that still considers long to be 32 bits...Schopenhauerism
Since PHP 7.0, integers are 64-bit on 64-bit Windows: php.net/manual/en/language.types.integer.php - have updated the answer to reflect the additions to the manualLenitalenitive
@Lenitalenitive : What does exactly mean by "Unsigned Integers" in the statement "PHP does not support unsigned integers" from the above paragraph taken from the PHP manual? Would you please explain me regarding specifically to PHP? Thank You.Theurer
@SerialKisser I'm not the original poster, but unsigned integers are integers with an extra bit available to them, because they don't store +/- (the number is always positive). In PHP all integers are signed (can be positive or negative).Lenitalenitive
@VovaPopov yeah that's why it's AMD64 and not Intel64 (AKA: Itainium) - because it runs 32 bit software too :)Toadeater
P
105

32-bit builds of PHP:

  • Integers can be from -2,147,483,648 to 2,147,483,647 (~ ± 2 billion)

64-bit builds of PHP:

  • Integers can be from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 (~ ± 9 quintillion)

Numbers are inclusive.

Note: some 64-bit builds once used 32-bit integers, particularly older Windows builds of PHP

Values outside of these ranges are represented by floating point values, as are non-integer values within these ranges. The interpreter will automatically determine when this switch to floating point needs to happen based on whether the result value of a calculation can't be represented as an integer.

PHP has no support for "unsigned" integers as such, limiting the maximum value of all integers to the range of a "signed" integer.

Physiological answered 16/5, 2010 at 4:1 Comment(5)
Interestingly, in 32-bit builds floats can retain integer accuracy to higher values than ints - floats can be used for integer values up to 2^53 + 1, significantly higher than the 2^31 - 1 of ints. In 64-bit builds this is reversed because floats are the same precision but ints are now up to 2^63 - 1.Physiological
> PHP has no support for "unsigned" integers as such This means that the maximum value of an unsigned long cannot be represented in PHP with an int, whether it's 32-bit or 64-bit. Also, a Javascript number can represent a maximum integer value of 53 bits, due to that language combining floats and ints in a single number type. So when you are designing a schema, it can make sense to take into account that the maximum integer value that can be represented on most systems is signed 53-bit and not (signed or unsigned) 64-bit.Faso
I think Javascript is relevant here because the number limit bleeds into JSON, which also cannot represent integer values larger than 53 bits.Faso
That 53 bit significance comes from IEEE754 which is also the standard for floating point numbers built right into processors.Physiological
Yeah, it's just that many languages define specific integer types which are not internally stored as double precision floats. This gives those languages 64-bit integers. Java for example has long, which is a signed 64-bit integer. C has unsigned long long, which on 64-bit architectures gives you an unsigned 64-bit integer. This means that in Java and C you can create integer values that are much higher that what can be expressed in a number in Javascript. This matters when you are creating a JSON API for example.Faso
V
24

The size of PHP ints is platform dependent:

The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.

PHP 6 adds "longs" (64 bit ints).

Valona answered 22/3, 2009 at 7:36 Comment(4)
i don't get these downvotes.. this is a perfectly good answer, even with some extra information thrown in. +1 to correct it.Beatabeaten
This answer originally read "platform independent" (not dependent). It also (still) claims that 64-bit ints didn't exist before PHP 6. This is false.Physiological
PHP 6 never happened though, so it's kind of irrelevant.Willie
Whether PHP 6 happened or not, this answer claims that earlier versions of PHP had no 64 bit integers, and even implies that PHP versions since have a data type called a "long" - neither is correct.Physiological
U
18

(a little bit late, but could be useful)

Only trust PHP_INT_MAX and PHP_INT_SIZE, this value vary on your arch (32/64 bits) and your OS...

Any other "guess" or "hint" can be false.

Undesigned answered 28/12, 2010 at 17:11 Comment(0)
B
7

Ah I found it: 232 - 1 (2147483647)

https://www.php.net/int

Integer overflow

If PHP encounters a number beyond the bounds of the integer type, it will be interpreted as a float instead. Also, an operation which results in a number beyond the bounds of the integer type will return a float instead.

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

$large_number =  2147483648;
var_dump($large_number);
// output: float(2147483648)
Beatabeaten answered 22/3, 2009 at 7:36 Comment(1)
This is what it would be on a 32-bit platform. Consider also that many people run servers on a 64-bit platform.Physiological
P
3

It subjects to architecture of the server on which PHP runs. For 64-bit,

print PHP_INT_MIN . ", ” . PHP_INT_MAX; yields -9223372036854775808, 9223372036854775807

Planet answered 29/6, 2019 at 13:14 Comment(0)
M
2

It depends on your OS, but 2147483647 is the usual value, according to the manual.

Murk answered 22/3, 2009 at 7:36 Comment(1)
Specifically, it depends on whether you are running on a 32-bit platform or 64-bit. 32-bit is only "usual" in a world where most people run 32-bit servers. Increasingly this is becoming not the case.Physiological
D
1

Although PHP_INT_* constants exist for a very long time, the same MIN / MAX values could be found programmatically by left shifting until reaching the negative number:

$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;
Duane answered 15/3, 2019 at 17:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.