Почему 00000000 ^ 01000010 = 01000010?Разве это не должно быть 0? - PullRequest
0 голосов
/ 13 октября 2018

Персонал для моего класса предоставил эту хэш-функцию, которая принимает 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 голосов
/ 13 октября 2018

Операция ^ не является степенью, степенью возведения в степень или повторным умножением, она является исключительной или (иногда записывается как XOR).Именно поэтому многие компьютерные языки, такие как C, C ++, Java и Python, используют символ ^.Посмотрите это в своих заметках - я уверен, что ваш класс уже рассмотрел это.Согласно этой интерпретации, уравнение, которое вы даете, является правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...