Яке максимальне значення для int в PHP?


117

Ігноруючи спеціальні бібліотеки, які дозволяють працювати з дуже великими числами, яке найбільше значення int ви можете зберігати в PHP?

Відповіді:


124

З посібника PHP :

Розмір цілого числа залежить від платформи, хоча максимальне значення близько двох мільярдів - це звичайне значення (це 32 біти підписано). PHP не підтримує непідписані цілі числа. Розмір цілого числа може бути визначений за допомогою постійної PHP_INT_SIZE, а максимальне значення, використовуючи постійну PHP_INT_MAX, починаючи з PHP 4.4.0 і PHP 5.0.5.

64-розрядні платформи зазвичай мають максимальне значення близько 9E18, за винятком Windows у програмі до PHP 7, де вона завжди була 32-бітовою.


15
Що ж, на ldd ld amd64, що є досить поширеним в наші дні, його 9223372036854775807 (2 ^ 63-1)
derobert

4
Це дуже багато цифр - є перша причина, яку я можу придумати, щоб коли-небудь обирати AMD над Intel під час покупки спеціалізованого сервера. :)
karim79

39
@ karim79, я думаю, це пов'язано з тим, що арка є 64-розрядною, а не AMD. =]
страгер

7
AMD64 - одне ім’я 64-розрядної архітектури, якою AMD та Intel користуються в наші дні. Інші назви для нього включають x64 та Intel 64. Як стверджує страгер, нічого спільного з цим не буде AMD
thomasrutter

4
Мої вікна XAMPP лунають 2147483647. У мене був AMD Athlon X2
Вова Попов

86

32-розрядні збірки PHP:

  • Цілі може бути від -2147483648 до 2147483647 (~ ± 2 млрд)

64-бітні збірки PHP:

  • Цілі числа можуть бути від -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 (~ ± 9 квінтільйона)

Числа включно.

Примітка: деякі 64-бітні збірки колись використовували 32-бітні цілі числа, особливо більш старі версії Windows будують із PHP

Значення поза цими діапазонами представлені значеннями з плаваючою комою, а також не цілими значеннями в цих діапазонах. Інтерпретатор автоматично визначить, коли цей перехід на плаваючу крапку повинен відбутися, виходячи з того, чи не може значення результату обчислення представити як ціле число.

PHP не підтримує цілі числа без підпису, обмежуючи максимальне значення всіх цілих чисел діапазоном "підписаного" цілого числа.


1
Цікаво, що в 32-бітових збірках поплавці можуть зберігати цілочисельну точність до більш високих значень, ніж ints - floats можна використовувати для цілих значень до 2 ^ 53 + 1, значно вище, ніж 2 ^ 31 - 1 ints. У 64-бітних складах це змінюється на зворотному рівні, оскільки поплавці мають однакову точність, але тепер
ints досягають

21

Розмір входів PHP залежить від платформи :

Розмір цілого числа залежить від платформи, хоча максимальне значення близько двох мільярдів - це звичайне значення (це 32 біти підписано). PHP не підтримує непідписані цілі числа. Розмір цілого числа може бути визначений за допомогою постійної PHP_INT_SIZE, а максимальне значення, використовуючи постійну PHP_INT_MAX, починаючи з PHP 4.4.0 і PHP 5.0.5.

PHP 6 додає "longs" (64 бітові вставки).


2
я не отримую цих зворотних запитань. Це абсолютно гарна відповідь, навіть якщо вкидається додаткова інформація. +1, щоб виправити це.
нікф

3
Ця відповідь спочатку читала "платформа в залежному" (не залежить). Він також (досі) стверджує, що 64-бітні ints не існували до PHP 6. Це помилково.
thomasrutter

PHP 6 ніколи не траплявся, тому це неабияк не має значення.
BadHorsie


6

Ага, я знайшов: 2 32 - 1 (2147483647)

http://au2.php.net/int

Переповнення цілого числа

Якщо PHP зустрічає число, що виходить за межі цілого типу, воно буде інтерпретуватися як плаваючий. Також операція, в результаті якої число виходить за межі цілого типу, замість цього поверне плавець.

<?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

Це залежить від вашої ОС, але відповідно до посібника 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.