C中使用按位运算的哈希码算法

丹零食

因此,我为此算法制作了一个哈希码函数:对于每个字符,将当前位旋转了三个位,将每个字符的值相加,然后将结果与当前值进行异或运算。这是我到目前为止的代码:

unsigned int hash_function(const char *k){   
    unsigned int current = 0;   
    unsigned int rot = 0;  
    int i = 0;  
    int r = 0;  
    for(i = 0; i < strlen(k); i++){  
        for(r = 0; r < 3; r++){  
            rot = ((rot & 1 (1 << 31)) >> 31 | (rot << 1);  
        }  
        rot += k[i];  
        current ^= rot;  
        rot = current;  
    }  
    return current;  
}

该算法应给出“ gimme” = 477003,“ shelter” = 41540041的一些示例。但是,该算法没有给我正确的结果。我相当确定我使用的是正确的旋转操作,然后按照原样执行算法。我想知道是否有人可以指出我正确的方向。谢谢,希望我能正确格式化这个问题

r3mainer

我想你打算放rot = ((rot & (1 << 31)) >> 31) | (rot << 1);但是循环是不必要的,请rot = ((rot & (7 << 29)) >> 29) | (rot << 3);改用。

这应该工作:

unsigned int hash_function(const char *k){   
    unsigned int current = 0;   
    unsigned int rot = 0;  
    int i = 0;  
    for (i = 0; i < strlen(k); i++){  
        rot = ((rot & (7 << 29)) >> 29) | (rot << 3);  
        rot += k[i];  
        current ^= rot;  
        rot = current;  
    }  
    return current;  
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C中使用按位运算的哈希码算法

来自分类Dev

具有按位运算符的C ++中的算法

来自分类Dev

使用按位运算

来自分类Dev

在Swift中使用C风格的无符号char数组和按位运算符

来自分类Dev

如何在Swift中使用结构处理按位运算?

来自分类Dev

如何在 QueryDSL 中使用按位运算符?

来自分类Dev

将图像哈希中使用的C#BitCount方法转换为涉及逐位运算符的T-SQL

来自分类Dev

Java运算符性能算法与按位运算

来自分类Dev

C ++按位运算反向

来自分类Dev

在 C++ 中使用按位运算符理解十进制到二进制函数的问题

来自分类Dev

使用按位和运算符c ++

来自分类Dev

TTTD分块算法中使用的哈希函数?

来自分类Dev

使用C中的按位运算进行2位映射

来自分类Dev

如何使用按位运算符和位操作在C中交换2个整数?

来自分类Dev

C函数,使用按位运算来查看int x是否适合n位

来自分类Dev

为什么ArrayDeque类在pollFirst方法中使用按位运算?

来自分类Dev

在Postgres中使用按位运算符获取Shard ID

来自分类Dev

如何在PHP中使用按位运算符生成数字

来自分类Dev

在过滤器中使用按位AND运算符

来自分类Dev

在Angular ng-if表达式中使用&(按位AND运算符)

来自分类Dev

当保护子句时如何在长生不老药中使用按位运算符?

来自分类Dev

C#中最快的按位运算

来自分类Dev

C ++中的联合和按位运算

来自分类Dev

优化C语言中的按位运算

来自分类Dev

c按位运算以匹配描述

来自分类Dev

C#中最快的按位运算

来自分类Dev

C解释中的按位运算

来自分类Dev

c按位运算以匹配描述

来自分类Dev

C按位运算符