Задать вопрос
@sddvxd

Зачем тут сдвиг влево (хеш)?

Здравствуйте! Ниже представлена конструкция для построения хеша из строки, мне непонятно, зачем нужен сдвиг:

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

со сдвигом число получилось больше и оно больше не встречается, если я введу другую строку, нежели со случаем без сдвига. может поэтому?
  • Вопрос задан
  • 204 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
longclaps
@longclaps
Если ксорить чар и чар - выйдет чар.
Если вам достаточно 256 уникальных значений хэша - и так сойдёт.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы