首页 > 解决方案 > 为什么 00000000 ^ 01000010 = 01000010?不应该是0吗?

问题描述

我班的工作人员提供了这个散列函数,它取 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

任何帮助都会很棒,我觉得真的很愚蠢。

标签: mathbinary

解决方案


^操作不是幂或幂或重复乘法,它是异或(有时写为 XOR)。这就是 C、C++、Java 和 Python 等计算机语言使用该^字符的数量。在你的笔记中查找——我相信你的班级已经涵盖了它。在这种解释下,您给出的方程式是正确的。


推荐阅读