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;

<<运营商在这种情况下会做什么?

4

1 回答 1

1

这是一个位转移。如果你有一个数字 X 以二进制表示为 00001111,那么 X << 3 将导致数字 01111000。X >> 3 将是 00000001。

实际上,X << nX * 2^n(考虑无符号类型的溢出)相同。X >> n相当于X / 2^n^我的意思是权力。

于 2013-09-27T01:30:29.817 回答