2012-05-14 44 views
-6

我不明白在下面的代码中运营商“< <”是什么意思。什么是C++中的“<<”运算符?

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

谷歌的c + + <<运算符,你会很快发生偏移。 – ScarletAmaranth

+0

它已经死了吉姆.. –

+3

“这个问题没有显示任何研究工作。”嗯...... – ildjarn

回答

1

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

a << b 

是一样的:

a * (2 to the power of b) 
+2

^是按位XOR – vrk001

+0

@ vrk001由于没有电源操作员,所以它被认为是伪代码。我会更明显地看到它是pseduo-code而不是C++。感谢提高这一点。 –

+0

你可以使用pow()函数。顺便说一句,^在Visual Basic中是正确的:-) – vrk001

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) 
+0

司?还是乘法? –

+0

@Ates Goral:Derp,我转移了错误的方式:)。谢谢。 –

+0

两位移位导致乘法/除法4. –

0

它是在C位位移操作者++。

0

这是一个bitwise shift left运营商,这意味着您分配h值时移由两位由2有效乘以h到2的幂左:

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

你可以找到更多关于它的信息here

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