我无法理解运营商“<<”表示以下代码。
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);
}
答案 0 :(得分:1)
这是左移操作员。它将剩余的值移位2位,实际上将它乘以2乘以2的幂(移位量)。
a << b
与:
相同a * (2 to the power of b)
答案 1 :(得分:0)
这是一个bit shift operator(在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)
答案 2 :(得分:0)
它是c ++中的bithift运算符。
答案 3 :(得分:0)
这是一个bitwise shift left
运算符,这意味着当向左移位两位时,将h
值分配有效地将h
乘以2,得到2的幂:
h << 2 == h * (2 ^ 2)
您可以找到有关它的更多信息here。
提示:下次首先搜索http://www.google.com。