为什么00000000 ^ 01000010 = 01000010?应该不是0吗?

时间:2018-10-13 19:22:32

标签: math binary

我班的工作人员提供了此哈希函数,该哈希函数采用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

任何帮助都会很棒,我感到自己很愚蠢。

1 个答案:

答案 0 :(得分:3)

^操作不是幂,乘幂或重复乘法,而是exclusive or(有时写为XOR)。这就是使用^字符的C,C ++,Java和Python等计算机语言的数量。在笔记中查找该内容-我确定您的课程已经覆盖它。根据这种解释,您给出的方程式是正确的。