我班的工作人员提供了此哈希函数,该哈希函数采用0并将其提高为ascii字符的值,并且在她的答案中表示答案(对于ascii'B')为01000010或66。在我看来,我们0与0乘以66。为什么那等于66?
代码如下:
int hash_it(char* needs_hashing)
{
unsigned int hash = 0;
for (int i=0, n=strlen(needs_hashing); i<n; i++)
hash = (hash << 2) ^ needs_hashing[i];
return hash % HASHTABLE_SIZE;
}
然后她继续解释:
i = 0
hash = 0x00
needs_hashing[0] = 'B'
hash << 2 = 0000
hash = 0x00 ^ 0x42 (0000 ^ 0100 0010) // <- 0 raised to 66
hash = 0x42 (0100 0010) //<-equals 66
任何帮助都会很棒,我感到自己很愚蠢。
答案 0 :(得分:3)
^
操作不是幂,乘幂或重复乘法,而是exclusive or(有时写为XOR)。这就是使用^
字符的C,C ++,Java和Python等计算机语言的数量。在笔记中查找该内容-我确定您的课程已经覆盖它。根据这种解释,您给出的方程式是正确的。