хэш-функция djb2

Я использую алгоритм djb2 для генерации хеш-ключа для строки, которая выглядит следующим образом

hash(unsigned char *str)
{
    unsigned long hash = 5381;
    int c;

    while (c = *str++)
        hash = ((hash << 5) + hash) + c; /* hash * 33 + c */

    return hash;
}

Теперь с каждым циклом происходит умножение на два больших числа. Через некоторое время с 4-м по 5-й символом строки происходит переполнение, поскольку значение хеш-функции становится огромным.

Какой правильный способ рефакторинга, чтобы хеш-значение не переполнялось и хэширование также происходило правильно

Ответы на вопрос(4)

Ваш ответ на вопрос