![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ts_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 6.10.2006 Репутация: нет Всего: нет |
В следущей хэш функции из "Страуструпа" не понмиаю как находиться индекс массива:
а именно не понимаю что возвращаеться в строке "ii<<1 ^ *pp++", что возвращает поразрядная операция исключающего ИЛИ ^? Кто это знает подскажите пожайлуста |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Исключающее ИЛИ, как обычно возвращает 1 для комбинации 0 и 1, и 0 в других случаях. А что же еще?
У тебя вычисляется хэш-индекс для строки. Текущее значение сдвигаем и "складываем" операцией XOR со следующим символом. Смысл в том, чтобы "разбросать" хранимые значения так, чтобы разные значение с малой вероятностью давали одинаковый хэш (т.е. чтобы списки в элементах table) были короткими, желательно не более 1. Этот алгоритм не единственный. -------------------- ... |
|||
|
||||
| ts_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 6.10.2006 Репутация: нет Всего: нет |
Спасибо Earnest, частично понял, не понял как определяеться код для следуещего символа после первого, если ввести один символ, возвращает ANSI код символа, если например "ab" -- выдает 160, поему выходит такой результат объясните пожайлуста? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Пардон, невнимательно посмотрела: в формуле используется код текущего символа, а не следующего (*pp++). С одним символом все ясно: 0 XOR [нечто] == [нечто]. На втором шаге это [нечто] сдвигается и ксорится со следующим символом. Почему получается 160 - ну посмотри по битам сам.
-------------------- ... |
|||
|
||||
| ts_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 6.10.2006 Репутация: нет Всего: нет |
Теперь все понял, еще раз спасибо, тема закрыта.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |