2013-09-27 82 views
0

一本書我讀用下面的函數哈希表的創建

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

這是[left bitshift operator](http://en.wikipedia.org /維基/ Bitwise_operation#Bit_shifts)。 'x << y'是'x *(2^y)',其中'^'代表功率,而不是異或。 – jedwards

回答

1

這是一個轉變。如果你有一個數X來表示二進制爲00001111,那麼X < < 3將導致數01111000. X >> 3是00000001

其實X << n是無符號類型的相同X * 2^n(考慮溢出)。 X >> n相當於X/2^n。由^我的意思是力量。