PHP Sol iki farklı makinelerde iki cevaplar veren Shift

3 Cevap php

PHP'nin sol kaydırma fonksiyonu davranışları konusunda çok kafam karıştı. Ben iki farklı makinelerde (dev ve hosting) üzerinde kullanıyorum ve bana farklı cevaplar veriyorlar. Ben bu hesaplama aşağı takip ettik:

(-3941404251) << 5;

Bir makinede ben cevap -1570884448 alıyorum; diğer yandan, ben 0 olsun. hem sistemlerinde, PHP_INT_MAX'tan = 2147483647. sonra 32-bit sistem ve ilk 64-bit, php bir 32 bit işlem olarak çalışan ve yine aynı cevabı verir rağmen.

Ben sadece bu 64-bit vs 32-bit ile bir sorun, ancak istenen davranışı elde etmek için herhangi bir kolay yolu olduğunu varsayabiliriz. Biri bir işlev falan bana gelin, bu harika olurdu.

Teşekkürler!

3 Cevap

İlk değer sorun için doğru cevaptır. Resmi manuel size max_int daha fazla sayıda bit operatörü kullanamazsınız diyor. Yani GMP fonksiyonları (Örneğin http://www.php.net/manual/en/function.gmp-and.php) kullanmayı deneyin ve bir dizge olarak dizi tedavi.

PHP aynı sürümünü çalıştıran makineler var mı? (-3941404251) Zaten 32 bitlik imzalı değeri çok büyük, bu yüzden ben "doğru" sonucu tanımsız ve versiyonları / derlemeleri / vb farklı sonuçlar bir hata sayılmaz veren farklı olduğunu sanıyorum.

Sen tamsayı sınırlamaları aşmak için BC Math işlevlerini kullanabilirsiniz. Bu ELQ GMP işlevi cevap için bir alternatif, ve muhtemelen daha iyi destekledi.