2013-09-27 78 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。由^我的意思是力量。