Hash

2013-09-27 4 views
0

Книга, которую я читаю создает хэш-таблицу со следующей функциейHash

size_t hash(const std::string &str) { 
    int count = 16; 
    size_t hash_value = 0; 
    const char *cstr = str.c_str(); 
    while(cstr && *cstr && --count) 
     hash_value += (*cstr++ - 'a') << (count % 4); 
    return hash_value; 

Что делает << оператора делать в этом контексте?

+0

[Ответ на диаграмме приоритета оператора.] (Http://en.cppreference.com/w/cpp/language/operator_precedence) – chris

+2

Это [левый оператор бит-сдвига] (http://en.wikipedia.org)./вики/Bitwise_operation # Bit_shifts). 'x << y' is' x * (2^y) 'где'^'представляет мощность, а не XOR. – jedwards

ответ

1

Немного сдвиг. Если у вас есть номер X представлен в двоичном виде 00001111, то X < < 3 приведет к числу 01111000. X >> 3 будет 00000001.

На самом деле, X << n такого же, как X * 2^n (учитывая переполнение без знака типа). X >> n эквивалентно X/2^n. К ^ Я имею в виду власть.

Смежные вопросы