Php 如何将64位整数的值均衡到32位
我想在64位和32位系统中匹配整数的值,这是我的PHP脚本的一个示例Php 如何将64位整数的值均衡到32位,php,integer,64-bit,32-bit,Php,Integer,64 Bit,32 Bit,我想在64位和32位系统中匹配整数的值,这是我的PHP脚本的一个示例 function integer_hash_aritmathic ($value) { $maxVal = 2147483647 & 0xFFFFFFFF; $minVal = -2147483648 & 0xFFFFFFFF; $hash = 0; for ($i = 0; $i < strlen($value); $i++) {
function integer_hash_aritmathic ($value)
{
$maxVal = 2147483647 & 0xFFFFFFFF;
$minVal = -2147483648 & 0xFFFFFFFF;
$hash = 0;
for ($i = 0; $i < strlen($value); $i++)
{
$hash = (intval($hash) * 31) + ord($value[$i]);
if ($hash > $maxVal) $hash = $hash + $minVal - $maxVal - 1;
else if ($hash < $minVal) $hash = $hash + $maxVal - $minVal + 1;
}
return (int)$hash;
}
echo integer_hash_aritmathic ('21512510');
函数整数\u散列\u算术($value)
{
$maxVal=2147483647&0xFFFFFFFF;
$minVal=-2147483648&0xFFFFFFFF;
$hash=0;
对于($i=0;$i$maxVal)$hash=$hash+$minVal-$maxVal-1;
如果($hash<$minVal)$hash=$hash+$maxVal-$minVal+1;
}
返回值(int)$hash;
}
回显整数散列算术('21512510');
32位系统中的输出:
-951649475
64位系统中的输出:
128324357029
我想在64位32位系统上得到相同的结果,值为-951649475,请帮助我。。。谢谢,我很抱歉我的英语不好…您似乎试图在64位系统上模拟32位溢出 问题可能是在64位系统上,$minVal=-2147483648&0xFFFFFFFF将符号位置零,将$minVal的值设置为2147483648。
$hash=$hash+$minVal-$maxVal-1
然后有效地变成$hash=$hash
,所有计算都使用完整的整数大小完成
如果删除导致64位系统出现问题的&0xffffffffff
(并且对32位系统没有影响),则代码应该可以工作
另一种选择是将散列值限制为31位,从而只产生正数
然后可以将代码简化为
function integer_hash_aritmathic ($value){
$hash = 0;
for ($i = 0; $i < strlen($value); $i++) {
$hash = ($hash * 31 + ord($value[$i])) & 0x7FFFFFFF;
}
return (int)$hash;
}
函数整数\u散列\u算术($value){
$hash=0;
对于($i=0;$i
64位系统上$minVal的值是多少?