Php 与体系结构无关的算术运算

Php 与体系结构无关的算术运算,php,32bit-64bit,Php,32bit 64bit,我在PHP中有一个哈希函数,它是Java哈希函数的一个端口。在我的32位计算机上,函数匹配。但是,在64位操作系统上运行PHP代码时,结果会发生变化 我是否可以独立于体系结构执行算术运算,就好像它们总是在32位系统上执行一样 这是我的哈希函数: 函数numericHash($text$lessThan=50) { $hash=0; 对于($i=0;$i6); $hash=intval($hash); } $hash+=($hash>11); $hash=intval($hash); $hash+

我在PHP中有一个哈希函数,它是Java哈希函数的一个端口。在我的32位计算机上,函数匹配。但是,在64位操作系统上运行PHP代码时,结果会发生变化

我是否可以独立于体系结构执行算术运算,就好像它们总是在32位系统上执行一样

这是我的哈希函数:

函数numericHash($text$lessThan=50)
{
$hash=0;
对于($i=0;$i6);
$hash=intval($hash);
}
$hash+=($hash>11);
$hash=intval($hash);

$hash+=intval($hash移位运算符在为64位编译的php上的行为不同,因为您在32位上的php_MAX_INT值为
0xFFFFFFFF
,而不是
0xFFFFFFFF

function lshift32($num, $steps) {
        // 64 bit
        if (PHP_INT_MAX >= 0x7FFFFFF) {
                if ($num < 0) {
                        // set 32bit signed bit
                        $num = $num | 0x80000000;
                }
                $num = ($num << $steps) & 0xFFFFFFFF;
                if (($num & 0x80000000) == 0x80000000) {
                        $num = $num | 0xFFFFFFFF00000000;
                }


                return $num;
        }
        else
        {
                return $num << $steps;
        }
}
函数lshift32($num,$steps){
//64位
如果(PHP_INT_MAX>=0x7FFFFFF){
如果($num<0){
//设置32位有符号位
$num=$num | 0x8000000;
}

$num=($num在我的例子中,解决方案是使用以下函数代替
intval

function intval32bits($value)
{
    $value = ($value & 0xFFFFFFFF);

    if ($value & 0x80000000)
        $value = -((~$value & 0xFFFFFFFF) + 1);

    return $value;
}

参考资料:

您有没有理由不能使用更标准的哈希算法,如SHA-256?不幸的是,这不是我的选择。我尝试了一个简单的测试,结果是32位:int(87860732)int(-224923648)64位:lshift32(int(87860732),10)=>int(4070043668)你能确认一下吗,Philipp?sign(我实现了一个lsh…)代码更新有一些问题