PHP eşdeğer javascript >>>

4 Cevap php

Ben PHP >>> nasıl yapabilirim biliyor olabilir? Bu operatörler PHP mevcut değildir, ancak JavaScript mevcuttur.

Ben sadece aşağıdaki gibi bir işlevi bulmak başardı:

function zeroFill($a, $b) 
{ 
    $z = hexdec(80000000); 
        if ($z & $a) 
        { 
            $a = ($a>>1); 
            $a &= (~$z); 
            $a |= 0x40000000; 
            $a = ($a>>($b-1)); 
        } 
        else 
        { 
            $a = ($a>>$b); 
        } 
        return $a; 
}

ama ne yazık ki, bu mükemmel çalışmıyor.

EG: -1149025787 >>> 0 Javascript returns 3145941509 PHP zeroFill() return 0

4 Cevap

Ben ağları etrafında okudu ve kendi zerofill fonksiyonu, verilen açıklama üzerine tabanı ile çıkıyor. Bu yöntem benim programı için çalışıyor.

Bir göz atın:

function zeroFill($a,$b) {
    if ($a >= 0) { 
        return bindec(decbin($a>>$b)); //simply right shift for positive number
    }

    $bin = decbin($a>>$b);

    $bin = substr($bin, $b); // zero fill on the left side

    $o = bindec($bin);
    return $o;
}

Bu php için çalışıyor emin, ben C # ile çalışmak için almak yönetmek ettik değil.

int a, b, result;
//Instead of 
result = a >>> b;
//I do
result = (int)((uint)a >> b);

I >>> javascript dönüştürülmüş kod C # sürümü ile karşılaştırarak kullandığı koduna hata ayıklama tarafından öğrendim. b = 0 ile çalışıyor, ve >> ve >>> javascript üretmek farklı hex / Aralık sonucunu görmek için bir bilimsel hesap makinesi kullanırken. a negatif olduğunda, >>> aslında imzasız olarak aa yapar.

Tüm senaryo için, ama benim durumumda için çalışıyor emin değilim eğer >>> md5 karma içindir. Benzer bir çıktı üretmek için güçlü olmak, ben sonuçtan oldukça memnunum.

Umut olur

Sizin işlevi çalışmıyor çünkü zaman $b == 0, ifade

$a >> -1

0 döndüren, değerlendirilecektir.

32-bit makineleri varsayarsak, bir özel durum ekleyebilirsiniz:

if ($z & $a) {
  if ($b == 0)
    return $a + 0x100000000;
  else {
    ...

Bu benim için çalışıyor

function RRR($a, $b){
    return (int)((float)$a/pow(2,(int)$b));
}