Ignoring the special libraries that allow you to work with very big numbers, what's the largest int value you can store in PHP?
8 Answers
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.
-
15Well, on amd64 linux, which is quite common nowadays, its 9223372036854775807 (2^63-1) – derobert Mar 22 '09 at 07:51
-
4That'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. :) – karim79 Mar 22 '09 at 08:02
-
40@karim79, I think it's due to the arch being 64-bit, not it being AMD. =] – strager Mar 22 '09 at 08:23
-
8AMD64 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 AMD – thomasrutter May 16 '10 at 03:42
-
4My windows XAMPP echo's 2147483647 . I had AMD Athlon X2 – Vova Popov Mar 19 '12 at 20:06
-
1@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. – RayLoveless Nov 30 '12 at 17:31
-
1@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... – cHao Dec 22 '12 at 23:50
-
1Since PHP 7.0, integers are 64-bit on 64-bit Windows: http://www.php.net/manual/en/language.types.integer.php - have updated the answer to reflect the additions to the manual – Ryall Jul 20 '17 at 13:33
-
@Ryall : 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. – Dec 24 '17 at 03:32
-
@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). – Ryall Dec 25 '17 at 16:57
-
@VovaPopov yeah that's why it's AMD64 and not Intel64 (AKA: Itainium) - because it runs 32 bit software too :) – Alec Teal Jan 18 '19 at 13:30
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.
- 109,718
- 27
- 142
- 163
-
1Interestingly, 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. – thomasrutter Jul 31 '18 at 00:45
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).
-
2i don't get these downvotes.. this is a perfectly good answer, even with some extra information thrown in. +1 to correct it. – nickf Mar 22 '09 at 08:08
-
3This answer originally read "platform *in*dependent" (not dependent). It also (still) claims that 64-bit ints didn't exist before PHP 6. This is false. – thomasrutter Dec 06 '16 at 23:23
-
1
-
PHP 4 and 5 are really outdated now, so this is a moot point, but the point is that PHP 4 and 5 had 64-bit integers too - this is not something added in PHP 6, nor has any PHP version had a type of integer called a "long". Integer type is simply dependent on the platform. – thomasrutter May 24 '21 at 01:40
(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.
- 765
- 9
- 18
Ah I found it: 232 - 1 (2147483647)
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)
-
8This is what it would be on a 32-bit platform. Consider also that many people run servers on a 64-bit platform. – thomasrutter May 16 '10 at 03:44
It subjects to architecture of the server on which PHP runs. For 64-bit,
print PHP_INT_MIN . ", ” . PHP_INT_MAX; yields -9223372036854775808, 9223372036854775807
- 16,197
- 2
- 61
- 88
It depends on your OS, but 2147483647 is the usual value, according to the manual.
- 81,190
- 27
- 202
- 228
-
6Specifically, 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. – thomasrutter May 16 '10 at 03:47
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;
- 45,845
- 14
- 70
- 113