Giá trị tối đa cho một int trong PHP là bao nhiêu?


117

Bỏ qua các thư viện đặc biệt cho phép bạn làm việc với các số rất lớn, giá trị int lớn nhất mà bạn có thể lưu trữ trong PHP là gì?

Câu trả lời:


124

Từ hướng dẫn sử dụng PHP :

Kích thước của một số nguyên phụ thuộc vào nền tảng, mặc dù giá trị tối đa khoảng hai tỷ là giá trị thông thường (đó là 32 bit có dấu). PHP không hỗ trợ số nguyên không dấu. Kích thước số nguyên có thể được xác định bằng cách sử dụng hằng số PHP_INT_SIZE và giá trị tối đa bằng cách sử dụng hằng số PHP_INT_MAX kể từ PHP 4.4.0 và PHP 5.0.5.

Các nền tảng 64-bit thường có giá trị tối đa khoảng 9E18, ngoại trừ trên Windows trước PHP 7, nơi nó luôn là 32 bit.


15
Vâng, trên amd64 Linux, mà là khá phổ biến hiện nay, nó 9223372036854775807 (2 ^ 63-1)
derobert

4
Đó là rất nhiều chữ số - đó là lý do đầu tiên tôi có thể nghĩ đến để chọn AMD thay vì Intel khi mua một máy chủ chuyên dụng. :)
karim79

39
@ karim79, tôi nghĩ đó là do vòm là 64-bit, không phải là AMD. =]
strager

7
AMD64 là một trong những tên gọi của kiến ​​trúc 64-bit được cả AMD và Intel sử dụng ngày nay. Các tên khác của nó bao gồm x64 và Intel 64. Như strager nói, không liên quan gì đến việc nó là AMD
thomasrutter

4
Cửa sổ của tôi XAMPP echo's 2147483647. Tôi đã có AMD Athlon X2
Vova Popov.

86

Các bản dựng 32-bit của PHP:

  • Số nguyên có thể từ -2,147,483,648 đến 2.147.483.647 (~ ± 2 tỷ)

Các bản dựng 64-bit của PHP:

  • Số nguyên có thể từ -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807 (~ ± 9 tạ tỷ)

Các con số được bao gồm.

Lưu ý: một số bản dựng 64-bit đã từng sử dụng số nguyên 32-bit, đặc biệt là các bản dựng Windows cũ hơn của PHP

Các giá trị bên ngoài các phạm vi này được biểu thị bằng các giá trị dấu phẩy động, cũng như các giá trị không phải là số nguyên trong các phạm vi này. Trình thông dịch sẽ tự động xác định thời điểm cần phải chuyển sang dấu phẩy động này dựa trên việc giá trị kết quả của một phép tính không thể được biểu diễn dưới dạng số nguyên.

PHP không hỗ trợ cho các số nguyên "không dấu" như vậy, giới hạn giá trị lớn nhất của tất cả các số nguyên trong phạm vi của một số nguyên "có dấu".


1
Điều thú vị là trong các bản dựng 32-bit, float có thể giữ lại độ chính xác của số nguyên cho các giá trị cao hơn int - float có thể được sử dụng cho các giá trị nguyên lên đến 2 ^ 53 + 1, cao hơn đáng kể so với 2 ^ 31 - 1 của int. Trong 64-bit được xây dựng này bị đảo ngược vì nổi là chính xác tương tự nhưng ints bây giờ lên đến 2 ^ 63 - 1.
thomasrutter

21

Kích thước của các int PHP phụ thuộc vào nền tảng :

Kích thước của một số nguyên phụ thuộc vào nền tảng, mặc dù giá trị tối đa khoảng hai tỷ là giá trị thông thường (đó là 32 bit có dấu). PHP không hỗ trợ số nguyên không dấu. Kích thước số nguyên có thể được xác định bằng cách sử dụng hằng số PHP_INT_SIZE và giá trị tối đa bằng cách sử dụng hằng số PHP_INT_MAX kể từ PHP 4.4.0 và PHP 5.0.5.

PHP 6 thêm "longs" (64 bit ints).


2
tôi không nhận được những phiếu phản đối này .. đây là một câu trả lời hoàn toàn tốt, ngay cả khi có thêm một số thông tin bổ sung. +1 để sửa nó.
nickf

3
Câu trả lời này ban đầu được đọc là "nền tảng trong phụ thuộc" (không phụ thuộc). Nó cũng (vẫn) tuyên bố rằng các int 64-bit không tồn tại trước PHP 6. Điều này là sai.
thomasrutter

Tuy nhiên, PHP 6 chưa bao giờ xảy ra, vì vậy nó không liên quan.
BadHorsie

16

(hơi muộn, nhưng có thể hữu ích)

Chỉ tin tưởng PHP_INT_MAX và PHP_INT_SIZE , giá trị này thay đổi tùy theo cung của bạn (32/64 bit) và hệ điều hành của bạn ...

Mọi "phỏng đoán" hoặc "gợi ý" khác đều có thể sai.


6

Ah tôi đã tìm thấy nó: 2 32 - 1 (2147483647)

http://au2.php.net/int

Tràn số nguyên

Nếu PHP gặp một số vượt quá giới hạn của kiểu số nguyên, nó sẽ được hiểu là số thực thay thế. Ngoài ra, một phép toán dẫn đến một số vượt quá giới hạn của kiểu số nguyên sẽ trả về một số thực thay thế.

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

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

8
Đây là những gì nó sẽ có trên nền tảng 32-bit. Cũng nên xem xét rằng nhiều người chạy máy chủ trên nền tảng 64-bit.
thomasrutter

2

Nó phụ thuộc vào hệ điều hành của bạn, nhưng 2147483647 là giá trị thông thường, theo sách hướng dẫn .


6
Cụ thể, nó phụ thuộc vào việc bạn đang chạy trên nền tảng 32 bit hay 64 bit. 32-bit chỉ là "bình thường" trong một thế giới mà hầu hết mọi người chạy máy chủ 32-bit. Càng ngày điều này càng trở nên không đúng.
thomasrutter

0

Mặc dù các PHP_INT_*hằng số tồn tại trong một thời gian rất dài, các giá trị MIN / MAX giống nhau có thể được tìm thấy theo chương trình bằng cách dịch sang trái cho đến khi đạt đến số âm:

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

0

Nó phụ thuộc vào kiến ​​trúc của máy chủ mà PHP chạy trên đó. Đối với 64-bit,

print PHP_INT_MIN . ", ” . PHP_INT_MAX; hoa lợi -9223372036854775808, 9223372036854775807

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.