Berapa nilai maksimum untuk sebuah int di PHP?

117

Mengabaikan pustaka khusus yang memungkinkan Anda bekerja dengan angka yang sangat besar, apa nilai int terbesar yang dapat Anda simpan di PHP?

nickf
sumber

Jawaban:

124

Dari manual PHP :

Ukuran bilangan bulat bergantung pada platform, meskipun nilai maksimum sekitar dua miliar adalah nilai biasa (yang ditandatangani 32 bit). PHP tidak mendukung integer tak bertanda tangan. Ukuran bilangan bulat dapat ditentukan menggunakan konstanta PHP_INT_SIZE, dan nilai maksimum menggunakan konstanta PHP_INT_MAX sejak PHP 4.4.0 dan PHP 5.0.5.

Platform 64-bit biasanya memiliki nilai maksimum sekitar 9E18, kecuali pada Windows sebelum PHP 7, yang selalu 32 bit.

karim79.dll
sumber
15
Nah, di amd64 linux, yang cukup umum saat ini, 9223372036854775807 (2 ^ 63-1)
derobert
4
Itu angka yang banyak - ada alasan pertama yang dapat saya pikirkan untuk memilih AMD daripada Intel saat berbelanja untuk server khusus. :)
karim79
39
@ Karim79, saya pikir itu karena lengkungannya 64-bit, bukan AMD. =]
strager
7
AMD64 adalah salah satu nama arsitektur 64-bit yang digunakan oleh AMD dan Intel saat ini. Nama lain untuk itu termasuk x64 dan Intel 64. Seperti yang dikatakan strager, tidak ada hubungannya dengan itu menjadi AMD
thomasrutter
4
Windows saya XAMPP echo 2147483647. Saya punya AMD Athlon X2
Vova Popov
86

Build PHP 32-bit:

  • Bilangan bulat dapat dari -2.147.483.648 hingga 2.147.483.647 (~ ± 2 miliar)

PHP 64-bit:

  • Bilangan bulat dapat dari -9.223.372.036.854.775.808 hingga 9.223.372.036.854.775.807 (~ ± 9 triliun)

Jumlahnya inklusif.

Catatan: beberapa build 64-bit pernah menggunakan integer 32-bit, terutama build Windows lama dari PHP

Nilai di luar rentang ini diwakili oleh nilai titik mengambang, seperti juga nilai non-bilangan bulat dalam rentang ini. Penerjemah akan secara otomatis menentukan kapan peralihan ke titik mengambang ini perlu terjadi berdasarkan apakah nilai hasil kalkulasi tidak dapat direpresentasikan sebagai bilangan bulat.

PHP tidak memiliki dukungan untuk integer "unsigned", membatasi nilai maksimum semua integer ke kisaran integer "bertanda".

thomasrutter
sumber
1
Menariknya, dalam build 32-bit, float dapat mempertahankan akurasi integer ke nilai yang lebih tinggi daripada int - float dapat digunakan untuk nilai integer hingga 2 ^ 53 + 1, jauh lebih tinggi daripada 2 ^ 31 - 1 int. Pada build 64-bit, hal ini dibalik karena float memiliki presisi yang sama tetapi int sekarang hingga 2 ^ 63 - 1.
thomasrutter
21

Ukuran PHP int tergantung pada platform :

Ukuran bilangan bulat bergantung pada platform, meskipun nilai maksimum sekitar dua miliar adalah nilai biasa (yang ditandatangani 32 bit). PHP tidak mendukung integer tak bertanda tangan. Ukuran bilangan bulat dapat ditentukan menggunakan konstanta PHP_INT_SIZE, dan nilai maksimum menggunakan konstanta PHP_INT_MAX sejak PHP 4.4.0 dan PHP 5.0.5.

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

cletus
sumber
2
saya tidak mendapatkan suara negatif ini .. ini adalah jawaban yang sangat bagus, bahkan dengan beberapa informasi tambahan yang dimasukkan. +1 untuk memperbaikinya.
nickf
3
Jawaban ini awalnya membaca "platform in dependent" (tidak tergantung). Ia juga (masih) mengklaim bahwa 64-bit ints tidak ada sebelum PHP 6. Ini salah.
thomasrutter
PHP 6 tidak pernah terjadi, jadi ini agak tidak relevan.
BadHorsie
16

(agak terlambat, tapi bisa berguna)

Hanya percaya PHP_INT_MAX dan PHP_INT_SIZE , nilai ini bervariasi pada arch Anda (32/64 bit) dan OS Anda ...

"Tebakan" atau "petunjuk" lainnya bisa jadi salah.

Julien CROUZET
sumber
6

Ah saya menemukannya: 2 32 - 1 (2147483647)

http://au2.php.net/int

Overflow bilangan bulat

Jika PHP menemukan angka di luar batas tipe integer, itu akan diinterpretasikan sebagai float. Selain itu, operasi yang menghasilkan angka di luar batas tipe integer akan mengembalikan float sebagai gantinya.

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

$large_number =  2147483648;
var_dump($large_number);
// output: float(2147483648)
nickf
sumber
8
Inilah yang akan terjadi pada platform 32-bit. Pertimbangkan juga bahwa banyak orang menjalankan server pada platform 64-bit.
thomasrutter
2

Itu tergantung pada OS Anda, tetapi 2147483647 adalah nilai yang biasa, menurut manual .

NullUserException
sumber
6
Secara khusus, ini tergantung pada apakah Anda menjalankan pada platform 32-bit atau 64-bit. 32-bit hanya "biasa" di dunia di mana kebanyakan orang menjalankan server 32-bit. Hal ini semakin tidak menjadi masalah.
thomasrutter
0

Meskipun PHP_INT_*konstanta ada untuk waktu yang sangat lama, nilai MIN / MAX yang sama dapat ditemukan secara terprogram dengan menggeser ke kiri hingga mencapai angka negatif:

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

Ini tunduk pada arsitektur server tempat PHP berjalan. Untuk 64-bit,

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

snr
sumber