这个程序是一个字符串HASH算法。但是
<?
define ("CONSTANT",0x62531965);
function moveleft19($val)
{
   $shift  = 19;
   $shift &= 0x1f;
   $val = (($val>>(0x20 - $shift))&524287) | ($val << $shift);
   return $val;
}
$serverName="i love you you love me too?";
$hServer=0;        for($i=0;$i<strlen($serverName);$i++){
                  $hServer += moveleft19($tmp)+ord($serverName[$i]);
                   }
  $hServer += $hServer * 0x62531965;
?>这样一个程序,是从C上移植过来的。但是用PHP实现的时候却发现,在不同的PHP版本上,结果不一样,同一个PHP上,不同的访问,结果也不一样。
后来逐步排除,认为是整数溢出造成的,因为PHP上没有unsigned int 这个类型,所以,当数值达到2147483647之后再进行的运算,结果就很不确定了。
moveleft19是对一个int型的数字进行循环移动,这个经测试是没有问题的。
请问下大家该怎么处理,谢谢了!