Ignoring the special libraries that allow you to work with very big numbers, what's the largest int value you can store in PHP?
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.
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 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.
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 number
limit bleeds into JSON, which also cannot represent integer values larger than 53 bits. –
Faso 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 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).
(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.
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)
It subjects to architecture of the server on which PHP runs. For 64-bit,
print PHP_INT_MIN . ", ” . PHP_INT_MAX;
yields -9223372036854775808, 9223372036854775807
It depends on your OS, but 2147483647 is the usual value, according to the manual.
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;
© 2022 - 2024 — McMap. All rights reserved.