从最高有效位计算小数& PHP中最不重要的位

时间:2013-04-17 20:36:26

标签: php bit

我在这里有点难过。我有2个32位整数,一个用于最高位和&另一个是最少的。如何在PHP中找到这两个的十进制等值?

更新的 我已经尝试过@bwoebi的建议并对其进行了一些修改。这是代码:

$value=get64($msb, $lsb);

function get64($msb, $lsb) {
    $count = count($lsb);
    for($i=0; $i < $count; $i++) {
        $value[$i] = bcadd(bcmul($msb[$i], bcpow(2, 32)), $lsb[$i] > 0?$lsb[$i]:bcadd(bcsub(bcpow(2, 32), $lsb[$i]), 2 << 30)); // $a most significant bits, $b least significant bits
    }
}

输出:

msb=Array ( [0] => INTEGER: 0 [1] => INTEGER: 0 ) 
lsb=Array ( [0] => INTEGER: 143 [1] => INTEGER: 0 ) 
value=Array ( [0] => 2147483648 [1] => 2147483648 ) 

输出看起来不正确......我原以为143为值[0]。有什么输入吗?

2 个答案:

答案 0 :(得分:1)

bcadd(bcmul($a, bcpow(2, 32)), $b >= 0?$b:bcsub(bcpow(2, 32), $b)); // $a most significant bits, $b least significant bits

应该做的工作。我正在使用bc库,因为在32位系统上使用普通运算符时可能会出现不精确的情况(它将转换为浮点数)。

答案 1 :(得分:0)

您可以使用BC MathGNU Multiple Precision扩展来执行算术,其值对于本机PHP变量来说太大了。