Здравствуйте! Ниже представлена конструкция для построения хеша из строки, мне непонятно, зачем нужен сдвиг:
int hash = 0;
char* string = "abc";
const char* pchar = string;
while(*pchar){
hash <<= 1;
hash ^= *pchar++;
}
Есть догадки, что если бы не сдвиг, хеш получился бы не уникальным:
//Без сдвига
abc = 97, 98, 99
хеш = 0 XOR 97 = 97
хеш = 97 XOR 98 = 3
хеш = 3 XOR 99 = 96
//Со сдвигом
хеш = 0 XOR 97 = 97
хеш << 1 = 194
хеш = 194 XOR 98 = 160
хеш << 1 = 320
хеш = 320 XOR 99 = 291
со сдвигом число получилось больше и оно больше не встречается, если я введу другую строку, нежели со случаем без сдвига. может поэтому?