2012-05-14 75 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首先。