-6

我无法理解以下代码中的运算符“<<”是什么意思。

    long hashString(char* key)
 {
   int n = strlen(key);
   long h = 0;
   for(int i=0; i<n; i++)
     {
        h = (h << 2) + key[i];
     }
  return abs(h % tablesize);
 }
4

4 回答 4

1

它是左移运算符。它将值左移 2 位,有效地将其乘以 2 的 2 次方(移位量)。

a << b

是相同的:

a * (2 to the power of b)
于 2012-05-14T18:13:34.000 回答
0

它是一个位移运算符(在这个上下文中是一个long变量)。

它将所有位移动 2 位,结果乘以 4(就像您将在基数为 10 的数字中添加两个数字以乘以 100。概括地说,移动n位将使数字乘以2^n)。例如:

unsigned int x = 0xA;     // x = 1010  (10 base 10)
unsigned int y = x << 1;  // y = 10100 (20 base 10)

您可以通过将位向右移动来执行除以二(即,从末尾切掉一个)

unsigned int x = 0xA;     // x = 1010  (10 base 10)
unsigned int y = x >> 1;  // y =  101  (5 base 10)
于 2012-05-14T18:12:56.010 回答
0

它是 C++ 中的位移运算符。

于 2012-05-14T18:13:32.647 回答
0

这是一个bitwise shift left运算符,这意味着您h在左移两位时分配值,有效地乘以h2 到 2 的幂:

h << 2 == h * (2 ^ 2)

您可以在此处找到有关它的更多信息。

提示:下次先搜索http://www.google.com

于 2012-05-14T18:16:35.367 回答