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?

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.


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".


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).


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


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)

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 .


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;

0

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.