PHP en iyi,
örneğin,
11011111 ==> 11111011
Bit Twiddling Hacks bit dizileri tersine üzerinde bölümünü kontrol edin. PHP içine tekniklerden birini uyarlamak kolay olmalıdır.
Muhtemelen PHP, 3 64bit işlemlerini kullanarak özellikle büyüleyici bir uygulama var olmasa da:
unsigned char b; // reverse this (8-bit) byte
b = (b * 0x0202020202ULL & 0x010884422010ULL) % 1023;
Hızlı yolu değil, aynı zamanda daha fazla alan gerektiren bir byte (256 siz dizi için giderseniz) her olası değeri, eşdeğer "ters" ile ilişkili sayede bir arama olduğunu.
Eğer sadece işlemek için birkaç tür byte varsa, bit-bilge operatörleri yapacak ama belki gibi bir şey, yavaş olacaktır:
function reverseBits($in)
{
$out = 0
if ($in & 0x01) { $out |= 0x80;}
if ($in & 0x02) { $out |= 0x40;}
if ($in & 0x04) { $out |= 0x20;}
if ($in & 0x08) { $out |= 0x10;}
if ($in & 0x10) { $out |= 0x08;}
if ($in & 0x20) { $out |= 0x04;}
if ($in & 0x40) { $out |= 0x02;}
if ($in & 0x80) { $out |= 0x01;}
return $out;
}
Bu, bit uzunluğu ile O (n) 'dir. Sadece bir yığın olarak girdi düşünmek ve çıkış yığını yazmak.
PHP, bu yazı benim girişimi.
function bitrev ($inBits, $bitlen){
$cloneBits=$inBits;
$inBits=0;
$count=0;
while ($count < $bitlen){
$count=$count+1;
$inBits=$inBits<<1;
$inBits=$inBits|($cloneBits & 0x1);
$cloneBits=$cloneBits>>1;
}
}
Ben işleme performansını koz belleğe yüklemek için (büyük tamsayılar için) gerekli süreyi bir tabloyu kullanarak katılmıyorum.
Ben de şöyle bir O (logn) çözümü için bir bit maskeleme yaklaşım kullanın:
MASK = onescompliment of 0
while SIZE is greater than 0
SIZE = SIZE shiftRight 1
MASK = MASK xor (MASK shiftLeft SIZE)
output = ((output shiftRight SIZE) bitwiseAnd MASK) bitwiseOR ((onescompliment of MASK) bitwiseAnd (output shfitLeft SIZE))
Bu yaklaşımın avantajı, bir argüman olarak tamsayı boyutunu ele almaktadır
php bu gibi görünebilir:
function bitrev($bitstring, $size){
$mask = ~0;
while ($size > 0){
$size = $size >> 1;
$mask = $mask ^ ($mask << $size);
$bitstring = (($bitstring >> $size) & $mask) | ((~$mask) & ($bitstring << $size));
}
}
Ben bir yerde benim php mahvettim sürece: (