PHP'de bir int için maksimum değer nedir?


117

Çok büyük sayılarla çalışmanıza izin veren özel kitaplıkları göz ardı ederek, PHP'de saklayabileceğiniz en büyük int değeri nedir?

Yanıtlar:


124

Gönderen PHP Kılavuzu :

Bir tamsayının boyutu platforma bağlıdır, ancak yaklaşık iki milyar maksimum değer olağan değerdir (bu 32 bit işaretlidir). PHP, işaretsiz tam sayıları desteklemez. Tam sayı boyutu sabit PHP_INT_SIZE kullanılarak ve maksimum değer PHP 4.4.0 ve PHP 5.0.5'ten beri sabit PHP_INT_MAX kullanılarak belirlenebilir.

64-bit platformlar, her zaman 32 bit olan PHP 7'den önceki Windows hariç, genellikle 9E18 kadar bir maksimum değere sahiptir.


15
Eh, günümüzde oldukça yaygın olan amd64 linux üzerinde, 9223372036854775807 (2 ^ 63-1)
derobert

4
Bu çok fazla rakam - özel bir sunucu için alışveriş yaparken Intel yerine AMD'yi seçmenin ilk nedeni var. :)
karim79

39
@ karim79, sanırım bunun AMD olmaması değil, 64-bit olması nedeniyle. =]
strager

7
AMD64, bugünlerde hem AMD hem de Intel tarafından kullanılan 64 bit mimarinin bir adıdır. Diğer isimler arasında x64 ve Intel 64 var. Strager'ın dediği gibi, bunun AMD olmasıyla hiçbir ilgisi yok
thomasrutter

4
Windows XAMPP echo 2147483647. AMD Athlon X2 vardı
Vova Popov

86

32 bit PHP derlemeleri:

  • Tamsayılar arasında olabilir -2,147,483,648 için 2,147,483,647 (~ ± 2 milyar dolar)

64 bit PHP derlemeleri:

  • Tam sayılar -9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807 (~ ± 9 kentilyon ) arasında olabilir

Sayılar kapsayıcıdır.

Not: Bazı 64-bit derlemeler bir zamanlar 32-bit tamsayılar kullanıyordu, özellikle eski PHP Windows sürümleri

Bu aralıkların dışındaki değerler, bu aralıklar içindeki tamsayı olmayan değerler gibi kayan nokta değerleriyle temsil edilir. Yorumlayıcı, bir hesaplamanın sonuç değerinin tamsayı olarak temsil edilemeyeceğine bağlı olarak bu kayan noktaya geçişin ne zaman olması gerektiğini otomatik olarak belirleyecektir.

PHP'nin "işaretsiz" tamsayılar için desteği yoktur, bu da tüm tam sayıların maksimum değerini "işaretli" bir tamsayı aralığıyla sınırlar.


1
İlginç bir şekilde, 32 bitlik yapılarda kayan sayılar tamsayı doğruluğunu tam sayı doğruluğunu ints'ten daha yüksek değerlere kadar koruyabilir - kayan değerler, 2 ^ 31 - 1 ints değerinden önemli ölçüde daha yüksek olan 2 ^ 53 + 1'e kadar tam sayı değerleri için kullanılabilir. 64 bitlik yapılarda bu tersine çevrilir çünkü kayan değerler aynı hassasiyete sahiptir, ancak girişler artık 2 ^ 63 - 1'e
kadardır

21

PHP ints boyutu platforma bağlıdır :

Bir tamsayının boyutu platforma bağlıdır, ancak yaklaşık iki milyar maksimum değer olağan değerdir (bu 32 bit işaretlidir). PHP, işaretsiz tam sayıları desteklemez. Tam sayı boyutu sabit PHP_INT_SIZE kullanılarak ve maksimum değer PHP 4.4.0 ve PHP 5.0.5'ten beri sabit PHP_INT_MAX kullanılarak belirlenebilir.

PHP 6, "long" (64 bit inç) ekler.


2
Bu olumsuz oyları alamıyorum .. Bu, bazı ekstra bilgiler eklenmiş olsa bile mükemmel bir cevap. Düzeltmek için +1.
nickf

3
Bu cevap aslen "platformu okumak içinde bağımlı" (bağımlı değildir). Ayrıca (hala) 64-bit int'lerin PHP 6'dan önce var olmadığını iddia ediyor. Bu yanlıştır.
thomasrutter

Yine de PHP 6 hiç olmadı, bu yüzden biraz alakasız.
BadHorsie


6

Ah buldum: 2 32 - 1 adet (2147483647)

http://au2.php.net/int

Tamsayı taşması

PHP, tamsayı türünün sınırlarının ötesinde bir sayıyla karşılaşırsa, bunun yerine bir kayan nokta olarak yorumlanacaktır. Ayrıca, tamsayı türünün sınırlarının ötesinde bir sayıyla sonuçlanan bir işlem bunun yerine bir kayan nokta döndürür.

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

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

8
Bu, 32 bitlik bir platformda olacağı şeydir. Ayrıca birçok kişinin 64 bitlik bir platformda sunucu çalıştırdığını da göz önünde bulundurun.
thomasrutter

2

İşletim sisteminize bağlıdır, ancak kılavuza göre 2147483647 olağan değerdir .


6
Özellikle, 32 bitlik bir platformda mı yoksa 64 bitlik bir platformda mı çalıştığınıza bağlıdır. 32-bit, çoğu insanın 32-bit sunucuları çalıştırdığı bir dünyada yalnızca "olağandır". Giderek artan bir şekilde durum böyle olmuyor.
thomasrutter

0

PHP_INT_*Sabit değerler çok uzun bir süredir mevcut olsa da , aynı MIN / MAX değerleri, negatif sayıya ulaşana kadar sola kaydırılarak programlı olarak bulunabilir:

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

0

PHP'nin üzerinde çalıştığı sunucunun mimarisine bağlıdır. 64 bit için,

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.