0

そのため、長いビット配列 (100 ビット以上) を扱う Web サービスに取り組もうとしています。

長いビット配列を扱う PHP のクラスを提案できる人はいますか?

4

1 に答える 1

6

PHP は長いビット配列をサポートしていません。通常の配列を使用して、次のように適切なオフセットを計算できます (これは 32 ビット アーキテクチャのサンプルです)。

$array = [];
$bitToSet = 33;
setbit($array, $bitToSet);
print_r($array);

echo getbit($array, $bitToSet-1) . "\n";
echo getbit($array, $bitToSet) . "\n";
echo getbit($array, $bitToSet+2) . "\n";

function setbit(&$array, $bitNumber) {
    $arrayIdx = $bitNumber >> 5; // I suppose 32 bit int
    $bitIdx = $bitNumber & 0x1f;
    if (!isset($array[$arrayIdx])) $array[$arrayIdx] = 0;
    $array[$arrayIdx] = (1<<$bitIdx); 
}
function uRShift($a, $b) {
    if($b == 0) return $a;
    return ($a >> $b) & ~(1<<(8*PHP_INT_SIZE-1)>>($b-1));
}
function getbit(&$array, $bitNumber) {
    $arrayIdx = $bitNumber >> 5;
    $bitIdx = $bitNumber & 0x1f;
    if (!isset($array[$arrayIdx])) $array[$arrayIdx] = 0;
    return uRShift($array[$arrayIdx], $bitIdx)&1;
}

また、 GMPBC Mathについても確認できますが、とにかく最良の選択肢ではありません

于 2013-10-30T21:03:34.823 に答える