Php 与体系结构无关的算术运算
我在PHP中有一个哈希函数,它是Java哈希函数的一个端口。在我的32位计算机上,函数匹配。但是,在64位操作系统上运行PHP代码时,结果会发生变化 我是否可以独立于体系结构执行算术运算,就好像它们总是在32位系统上执行一样 这是我的哈希函数: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+
函数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…)代码更新有一些问题